设计模式--行为型--观察者模式
来源:互联网 发布:买车软件哪个好 编辑:程序博客网 时间:2024/04/29 13:47
一、观察者模式简介(Brief Introduction)
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化的时,会通知所有观察者对象,使他们能够自动更新自己。二、解决的问题(What To Solve)
当一个对象的改变需要同时改变其他对象的时候,而且不知道有多少对象有待改变时,应该考虑使用观察者模式。观察者模式所做的工作其实就是解除耦合,让耦合的双方都依赖于抽象,而不是依赖于具体,从而使的各自的变化都不会影响另一边的变化。
三、观察者模式分析(Analysis)
Subject:目标对象,通常具有如下功能
一个目标可以被多个观察者观察
目标提供对观察者注册和退订的维护
当目标的状态发生变化时,目标负责通知所有注册的、有效的观察者
Observer:定义观察者的接口,提供目标通知时对应的更新方法,这个更新方法进行相应的业务处理,可以在这个方法里面回调目标对象,以获取目标对象的数据
ConcreteSubject:具体的目标实现对象,用来维护目标状态,当目标对象的状态发生改变时,通知所有注册的、有效的观察者,让观察者执行相应的处理
ConcreteObserver:观察者的具体实现对象,用来接收目标的通知,并进行相应的后续处理,比如更新自身的状态以保持和目标的相应状态一致
四、实例代码
1、Subject对象及其子类
public class Subject {private List<Observer> listObservers = new ArrayList<Observer>();public void attach(Observer observer){this.listObservers.add(observer);}public void detach(Observer observer){this.listObservers.remove(observer);}public void notifyObservers(){for(Observer observer:listObservers){observer.update(this);}}}
public class ConcreteSubject extends Subject {private String state;public String getState(){return this.state;}public void setState(String state){this.state = state;this.notifyObservers();}}
2、Observer接口及其实现
public interface Observer {public void update(Subject subject);}
public class ConcreteObserver implements Observer {private String state;public void update(Subject subject) {System.out.println("状态发生改变,处理相应业务.....");state = ((ConcreteSubject)subject).getState();}}
3、客户端调用
public class Client {public static void main(String[] args) {Observer observer1 = new ConcreteObserver();Observer observer2 = new ConcreteObserver();ConcreteSubject subject = new ConcreteSubject();subject.attach(observer1);subject.attach(observer2);subject.setState("state1");}}
运行结果:
- 设计模式 - 行为型模式 - 观察者模式
- 设计模式->行为型模式->观察者模式
- 设计模式-行为-观察者
- 设计模式--行为型--观察者模式
- 设计模式15:观察者模式【行为型】
- [设计模式-行为型]观察者模式(Observer)
- 设计模式-行为型之观察者模式
- 行为型设计模式-观察者模式
- 设计模式——观察者模式(行为型模式)
- 设计模式深入学习--Observer 观察者模式(行为型模式)
- 设计模式深入学习--Observer 观察者模式(行为型模式)
- Java设计模式之行为型模式(观察者模式)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- 设计模式----行为型模式之观察者模式(Observer Pattern)
- php各种编码集详解和在什么情况下进行使用
- 黑马程序员—C#中结构和类的区别
- inux errno 错误对照表
- checking network configuration requirements . The overall result of this check is: Not executed
- JSON必知
- 设计模式--行为型--观察者模式
- c++中的异步和同步机制
- USB Camera摄像头 (UVC 与 gspca)
- 编译oRTP库
- 黑马程序员——ASP.net中http协议
- 如何使用gdb调试程序
- c# .net 调用php 的webservice接口
- 黑马程序员—asp.net基础篇1
- JSP标准标签库(二)