您的位置:首页 > 其它

设计模式之观察者模式

2017-10-24 12:01 225 查看





代码执行:

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();
}


3、具体的主题类

//  具体的主题类
public class ConcreteSubject1 : Subject
{
//  主题类的一个信息
private string subState;
public string SubState
{
get { return subState; }
set
{
subState = value;
//  当主题类信息发生改变时通知观察者
NoticeObserver();
}
}
}


4、具体的观察者类

//  具体的观察者类
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: