观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
using System;
using System.Collections.Generic;
namespace MyApp
{
class Program
{
static void Main()
{
//There is a thief, a cat and a dog.
Subject thief1 = new Thief("Thief Jia");
Observer cat = new Cat("Maomi");
Observer dog=new Dog("Wangcai");
thief1.AddObserver(cat);
thief1.AddObserver(dog);
//The thief came into the house, and cat and dog ovserved the thief.
thief1.Notisfy();
Console.ReadKey();
}
}
abstract class Subject
{
public string Name { get; set; }
List<Observer> observers = new List<Observer>();
public Subject(string subjectName)
{
Name = subjectName;
}
public void AddObserver(Observer observer)
{
observers.Add(observer);
}
public void DeleteObserver(Observer observer)
{
observers.Remove(observer);
}
public void Notisfy()
{
foreach (Observer observer in observers)
{
observer.Update(this);
}
}
}
interface IObserverAction
{
void Update(Subject subject);
}
abstract class Observer:IObserverAction
{
public string Name { get; set; }
public Observer(string observerName)
{
Name = observerName;
}
public abstract void Update(Subject subject);
}
class Cat:Observer
{
public Cat(string catName)
: base(catName)
{ }
public override void Update(Subject subject)
{
Console.WriteLine("I'm a cat named {0}, and {1} has come into our house, miao!", Name, subject.Name);
}
}
class Dog : Observer
{
public Dog(string dogName)
: base(dogName)
{ }
public override void Update(Subject subject)
{
Console.WriteLine("I'm a dog named {0}, and {1} has come into our house, bar!", Name, subject.Name);
}
}
class Thief : Subject
{
public Thief(string thiefName)
: base(thiefName)
{ }
}
}
190

被折叠的 条评论
为什么被折叠?



