观察者模式
来源:互联网 发布:mysql默认地址 编辑:程序博客网 时间:2024/05/20 14:24
UML类图:
实现代码:
abstract class Subject { private IList<Observer> observers = new List<Observer>(); //增加观察者 public void Attach(Observer observer) { observers.Add(observer); } //移除观察者 public void Detach(Observer observer) { observers.Remove(observer); } //通知 public void Notify() { foreach (Observer o in observers) { o.Update(); } } } //具体通知者 class ConcreteSubject : Subject { private string subjectState; //具体通知者状态 public string SubjectState { get { return subjectState; } set { subjectState = value; } } } abstract class Observer { public abstract void Update(); } class ConcreteObserver : Observer { private string name; private string observerState; private ConcreteSubject subject; public ConcreteObserver( ConcreteSubject subject, string name) { this.subject = subject; this.name = name; } //更新 public override void Update() { observerState = subject.SubjectState; Console.WriteLine("观察者{0}的新状态是{1}", name, observerState); } public ConcreteSubject Subject { get { return subject; } set { subject = value; } } }
客户端代码:
ConcreteSubject s = new ConcreteSubject(); s.Attach(new ConcreteObserver(s, "X")); s.Attach(new ConcreteObserver(s, "Y")); s.Attach(new ConcreteObserver(s, "Z")); s.SubjectState = "ABC"; s.Notify(); Console.Read();
说明:
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
Cocoa Touch框架用两种技术改写了观察者模式----通知和键-值观察者(Key-Value Observing).
两者的区别:
通知 键-值观察者
一个中心对象为所有观察者提供变更通知 被观察的对象直接向观察者发送通知
主要从广义上关注程序事件 绑定于特定对象属性的值
参考资料
-《大话设计模式》
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 嵌入式linux:error while loading shared libraries的解决方法
- Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系
- android 关于Toast重复显示解决方法
- [Java]XML数据的请求和DOM技术解析
- Struts2标签
- 观察者模式
- Android框架模式之-MVP简单使用
- struts2 返回json数据
- Android:ScrollView中嵌套ViewPager和ListView示例
- 一个论文网站
- Struts2国际化
- Android Wear开发 - 学习指南
- 1006. 换个格式输出整数
- React-Native之fetch的使用