代码执行:
static void Main(string[] args)
{
ConcreteSubject1 sub1 = new ConcreteSubject1();
// 两者进行联系
ConcreteObserver1 ob1 = new ConcreteObserver1(sub1);
sub1.RegisterObserver(ob1);
//
sub1.SubState = "不睦沙卡拉卡";
Console.Read();
}
1、主题类接口
// 相当于天气的变化
// 主题类接口
public abstract class Subject
{
List<Observer> list = new List<Observer>();
// 注册观察者
public void RegisterObserver(Observer ob)
{
list.Add(ob);
}
// 移除观察者
public void RemoveObserver(Observer ob)
{
list.Remove(ob);
}
// 当主题类发生改变时通知观察者
public void NoticeObserver()
{
foreach (Observer ob in list)
{
ob.Update();
}
}
}
2、观察者接口
// 相当于天气预报的显示板
// 观察者类接口
public abstract class Observer
{
// 显示主题类改变了什么
public abstract void Update();
}
// 具体的主题类
public class ConcreteSubject1 : Subject
{
// 主题类的一个信息
private string subState;
public string SubState
{
get { return subState; }
set
{
subState = value;
// 当主题类信息发生改变时通知观察者
NoticeObserver();
}
}
}
// 具体的观察者类
public class ConcreteObserver1 : Observer
{
// 具体的那个主题类要视情况而定
public ConcreteSubject1 sub;
// 不要在内部 new 观察者,要在Main函数里面 new ,那样还可以注册观察者
// 否则的话,在里面 new 的观察者是没有被注册的
public ConcreteObserver1(ConcreteSubject1 sub)
{
this.sub = sub;
}
public override void Update()
{
// 显示板显示新的内容
Console.WriteLine("Oberver1更新显示: " + sub.SubState);
}
}