观察者模式(Observer)----行为笔记
来源:互联网 发布:linux查看cpu的线程数 编辑:程序博客网 时间:2024/06/04 18:38
观察者模式(Observer)----行为笔记
Observer模式:定义了一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新
拓展:事件委托
一、涉及角色:
1、 抽象主题(Subject):把所有观察者对象保存在一个集合里,称为被观察者
(ObServable)一般用抽象类实现,
2、 具体主题(ConcreteSubject):保存有关状态;在具体主题内部状态改变时,通知观察者。
3、 抽象观察者(Observer)一般为接口;为所有具体观察者定义接口,
4、 具体观察者(ConcreteObserver):可以保存指向具体主题对象的引用。
二、 何时使用观察者模式
1、当一个对象的改变需要同时改变其他对象,且它不知道具体有多少对象有待改变,
2、一个抽象模型有两个方面,其中一方面依赖于另一方面,用观察者,可将这两方面封装在独立的对象中,使它们各自独立地改变和复用,
三、故事说明
OBSERVER—想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦
观察者模式:观察者模式定义了一种一队多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己。
抽象被观察者
//抽象主题(被观察者)public abstract class Observable {Vector<Observer> observerList = new Vector<Observer>();//建了一个QQ群;public void addObserver(Observer o){observerList.add(o);}public void deleteObserver(Observer o){observerList.remove(o);}public void notifyObservers(){for(Observer observer : observerList){observer.update(this, null);}}}
具休主题(被观察者A)
//具休主题(被观察者A)public class ConcreteObserableB extends Observable {//小李他的 群定义为 //学习群,专门出集学习资料信息,并在群里共享,String message;public void foundInfo(String message) {//资料信息,并通知给群友this.message = message;notifyObservers();}@Overridepublic void notifyObservers() {for(Observer observer : observerList){observer.update(this, message);}}}
抽象观察者(Observer)//抽象观察者(Observer)public interface Observer {public void update(Observable o, Object arg);}
抽象观察者A(Observer)
//抽象观察者A(Observer)public class ConcreteObserverA implements Observer{@Overridepublic void update(Observable o, Object arg) {//更新 来自群主的信息System.out.println("来自群主A:--->" + arg );}}
抽象观察者B(ObserverB)public class ConcreteObserverB implements Observer {@Overridepublic void update(Observable o, Object arg) {System.out.println("来自群主B:--->" + arg );}}
客户端调用public static void main(String[] args) {Observer observerA = new ConcreteObserverA();//观察者AObserver observerB = new ConcreteObserverB();//观察者BConcreteObserableA observableA = new ConcreteObserableA(); //被观察者A 小张ConcreteObserableB observableB = new ConcreteObserableB(); //被观察者B 小李observableA.addObserver(observerA);//观察者A加 小张群,获取(观察)群信息observableB.addObserver(observerB);observableA.foundGire("发现一个女生,在XX角落");observableB.foundInfo("java编程思想");}
打印信息:来自群主A:--->发现一个女生,在XX角落
来自群主B:--->java编程思想
- 观察者模式(Observer)----行为笔记
- 观察者模式(Observer)----行为笔记
- 设计模式笔记--行为型模式之七Observer--观察者
- 行为模式:Observer(观察者)
- 行为型模式-观察者observer
- [设计模式笔记]三. 行为型模式--21. Observer模式(观察者)对象行为型模式(一)
- 行为型模式-观察者模式(Observer)
- 5.7 观察者模式observer(行为模式)
- 行为型模式-----观察者模式(Observer)
- [设计模式-行为型]观察者模式(Observer)
- 行为设计模式---观察者模式(Observer)
- 行为型模式-Observer ( 观察者模式 )
- 【设计模式】行为模式之Observer观察者
- 观察者模式(Observer)(行为模式)
- Observer 观察者模式 ----对象行为型模式
- Observer观察者(行为型模式)
- 十九、观察者模式Observer(行为型)
- 行为型模式之观察者OBSERVER
- x210ii开发板支持几乎全视频格式视频解码[独家支持]
- JAVA是解释型语言还是编译型语言
- 类图说明
- 策略模式(Strategy)----行为笔记
- 模版方法(Template)----行为笔记
- 观察者模式(Observer)----行为笔记
- 责任链模式(Chain of Responsibility)----行为笔记
- 命令模式(Command)----行为笔记
- 备忘录模式(Memento)----行为笔记
- 访问者模式(Visitor)----行为笔记
- 简单工厂模式(SimpleFactory)----创建笔记
- JBPM表结构说明
- Java实现给图片添加水印
- Zigbee术语——群集(Cluster)、端点(EndPoint)等