设计模式之观察者模式
来源:互联网 发布:世界 变化 知乎 编辑:程序博客网 时间:2024/06/06 03:15
概念:观察者模式(Observer)有时又被称为发布-订阅(Publish/Subscrib)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,是它们能够自动更新自己。观察者模式(Observer)完美的将观察者和被观察的对象分离开。
结构图:
例子:员工们在讨论股票,老板走进办公室的时候,其他人都安静了,只有一个同事背对着老板,还在继续说股票的事情。
例子的结构图:
代码:
//通知者接口 interface Subject { void Attach(Observer observer); void Detach(Observer observer); void Notify(); string SubjectState { get; set; } } //boss类 class Boss : Subject { //同事列表 private IList<Observer> observers = new List<Observer>(); private string action; //增加 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(); } //老板状态 public string SubjectState { get { return action; } set { action = value; } } } //抽象观察者 abstract class Observer { protected string name; protected Subject sub; public Observer(string name, Subject sub) { this.name = name; this.sub = sub; } public abstract void Update(); } //看股票的同事 class StockObserver : Observer { public StockObserver(string name, Subject sub) : base(name, sub) { } public override void Update() { Console.WriteLine("{0} {1} 关闭股票行情,继续工作",sub .SubjectState ,name ); } } //看NBA的同事 class NBAObserver : Observer { //public NBAObserver(String name, Secretary sub) // : base(name, sub) public NBAObserver(String name, Subject sub) : base(name, sub) { } public override void Update() { Console.WriteLine("{0} {1} 关闭NBA直播,继续工作!", sub.SubjectState , name); } }
客户端代码:
static void Main(string[] args) { //老板胡汉三 Boss huhansan = new Boss(); //看股票的同事 StockObserver tongshi1 = new StockObserver("魏关宅", huhansan); //看NBA的同事 NBAObserver tongshi2 = new NBAObserver("易管查", huhansan); huhansan.Attach(tongshi1 ); huhansan.Attach(tongshi2 ); huhansan.Detach(tongshi1); //老板回来了 huhansan.SubjectState = "我胡汉三回来了"; //发出通知 huhansan.Notify(); }
观察者模式的使用条件:1.当一个对象的改变需要同时改变其他对象,而且他不知道具体有多少对象有待改变时,应该考虑使用观察者模式。2.一个抽象模型有两个方面,其中一方面依赖于另一方面,这时用观察者模式可以将这两者封装在独立的对象中使它们各自独立的改变和复用。
观察者模式的特点是他所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响另一边的变化。
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
- 小谈版本控制VSS
- 巨人网络2012年10月11日大连理工大学宣讲会C++开发工程师笔试题
- 日期时间参数大全(一)
- soj 1497. Wavelet Compression
- 设计模式之观察者模式
- tar 解压去掉顶层目录
- 如何在裸机上装Linux系统
- 关于加密:本地用户名与密码安全的存储方案
- html5 websocket demo
- List All Of The Subsets
- 判断一个字符串中是否含有另一个字符串
- Oracle中的Round和Trunc函数区别
- Java常用的设计模式