设计模式之观察者模式(Observer)
2010-01-19 20:33
232 查看
观察者模式(Observer):定义了一种一对多的依赖关系,让多个观察着对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。
Subject类:抽象通知类,一般用一个抽象类或者一个接口实现。它把所有对观察者对象的引用保存在一个聚焦里,每个主题都可以有任意数量的观察者。
Obsever类:抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。
ConcreteSubject类:具体通知者,将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
ConcreteObserver类:具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。具体观察者角色可以保存一个指向具体主题对象的引用。通常用一个具体子类实现。
使用条件:将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用带来不便。所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。
Observer1.cs
代码
运行结果:
观察者X的新状态是ABC
观察者Z的新状态是ABC
Subject类:抽象通知类,一般用一个抽象类或者一个接口实现。它把所有对观察者对象的引用保存在一个聚焦里,每个主题都可以有任意数量的观察者。
Obsever类:抽象观察者,为所有的具体观察者定义一个接口,在得到主题的通知时更新自己。
ConcreteSubject类:具体通知者,将有关状态存入具体观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
ConcreteObserver类:具体观察者,实现抽象观察者角色所要求的更新接口,以便使本身的状态与主题的状态相协调。具体观察者角色可以保存一个指向具体主题对象的引用。通常用一个具体子类实现。
使用条件:将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象的一致性。我们不希望为了维持一致性而使各类紧密耦合,这样会给维护、扩展和重用带来不便。所做的工作其实就是在解除耦合。让耦合的双方都依赖于抽象,而不是依赖于具体。从而使得各自的变化都不会影响到另一边的变化。
Observer1.cs
代码
using System; using System.Collections.Generic; using System.Text; namespace Observer { class Program { static void Main(string[] args) { ConcreteSubject s = new ConcreteSubject(); s.Attach(new ConcreteObserver(s, "X")); s.Detach(new ConcreteObserver(s, "Y")); s.Attach(new ConcreteObserver(s, "Z")); s.SubjectState = "ABC"; s.Notify(); Console.Read(); } } }
运行结果:
观察者X的新状态是ABC
观察者Z的新状态是ABC
相关文章推荐
- .NET设计模式(19):观察者模式(Observer Pattern)
- 设计模式学习-Observer观察者模式
- 设计模式PHP5实现之----观察者(Observer)
- 我所理解的设计模式(C++实现)——观察者模式(Observer Pattern)
- java设计模式之观察者模式Observer
- 设计模式记--Observer Pattern观察者模式
- 二十二.行为型设计模式——Observer Pattern(观察者模式)
- 设计模式:观察者模式(Observer)
- 设计模式:观察者模式(observer) java实现及原理
- Observer观察者设计模式(对象行为型)
- 设计模式学习笔记--Observer Pattern观察者模式
- 设计模式:观察者模式(Observer)
- 学习php设计模式 php实现观察者模式(Observer)
- 设计模式-观察者模式(observer pattern)
- 设计模式:Observer(观察者)—— Guava EventBus
- 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)
- 设计模式 ( 十六 ) 观察者模式Observer(对象行为型)
- 设计模式之(十四)观察者模式Observer
- C++设计模式-Observer观察者模式
- java设计模式--观察者模式 Observer