【设计模式】观察者模式
来源:互联网 发布:淘宝店主自拍技巧 编辑:程序博客网 时间:2024/06/08 00:12
一、定义:
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。
二、结构图:
三、代码实现:
Subject类:(抽象通知者)
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(); } }}Observer类(抽象观察者)
abstract class Observer{ public abstract void Update();}ConcreteSubject类(具体主题或具体通知者)
class ConcreteSubject : Subject{ private string subjectState; //具体通知者状态 public string SubjectState { get { return subjectState; } set { subjectState = value; } }}ConcreteObserve类:
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; } }}客户端代码:
static void Main(string[] args){ 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();}结果显示如下:
阅读全文
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- shell命令解析器功能说明
- 61.笔记 MySQL学习——字符串类型与字符集
- dlib安装使用教程
- ccmake: /root/anaconda2/lib/libcrypto.so.1.0.0: no version information available
- 62.笔记 MySQL学习——字符集相关的系统变量
- 【设计模式】观察者模式
- 配置拦截器防xss和sql注入
- 利用TensorFlow实现卷积神经网络做文本分类
- 架构师之路工作量化与细化
- 63.笔记 MySQL学习——时态值
- 64.笔记 MySQL学习——空间、布尔、NULL值
- keil uversion 的简单的使用
- 65.(转) MySQL数据类型
- 11.02~11.16大周总结。