GOF23的一些总结(二十一)
来源:互联网 发布:酒店管理系统sql语句 编辑:程序博客网 时间:2024/05/22 01:56
观察者模式:
聊天室程序的创建:服务器创建好后,A,B,C三个客户端连接上来公开聊天。A向服务器发送数据,服务器端聊天数据改变。我们希望将这些聊天数据分别发给其他在线的客户。也就是说,每个客户端需要更新服务器端的数据。
多个观察者,客户称之为观察者。需要同步给多个订阅者的数据封装到对象中,称之为目标。
核心:N的通知,当一个对象(目标对象Subject或者Objservable)的状态变化时,他需要及时告知一系列对象(观察者对象,Observer),令他们做出响应。
目标对象的接口
package com.dasenlin.com;import java.util.ArrayList;import java.util.List;public class Subject { protected List <Observer> list = new ArrayList<Observer>(); public void addObserverObject(Observer obs){ list.add(obs); } public void removeObserverObject(Observer obs){ list.remove(obs); } public void notifyAllObservers(){ for(Observer objs:list){ objs.update(this); } }}
目标对象变化时变化中的通知
package com.dasenlin.com;public class ConcreteSubject extends Subject { private int state; public int getState() { return state; } public void setState(int state) { this.state = state; this.notifyAllObservers();//主体、目标对象发生变化的时候,所有的都发生了改变。 }}
观察者对象接口
package com.dasenlin.com;public interface Observer { void update(Subject subject);}
观察者对象接口实现
package com.dasenlin.com;public class ObserverA implements Observer { private int myState; @Override public void update(Subject subject) { myState =((ConcreteSubject)subject).getState();//将目标转换为当前目标,并获得状态 } public int getMyState() { return myState; } public void setMyState(int myState) { this.myState = myState; } }
测试
package com.dasenlin.com;public class Client { public static void main(String[] args) { //创建一个目标对象 ConcreteSubject subject = new ConcreteSubject(); //创建多个观察者 ObserverA obs1 = new ObserverA(); ObserverA obs2 = new ObserverA(); ObserverA obs3 = new ObserverA(); //将这3个观察者添加到subject对象的观察者队伍中 subject.addObserverObject(obs1); subject.addObserverObject(obs2); subject.addObserverObject(obs3); //改变这里的目标对象的状态 subject.setState(30000); //查看这里观察者的状态 System.out.println(obs1.getMyState()); System.out.println(obs2.getMyState()); System.out.println(obs3.getMyState()); }}
0 0
- GOF23的一些总结(二十一)
- GOF23的一些总结(二十一(下))
- GOF23的一些总结(十一)
- GOF23的一些总结(二)
- GOF23的一些总结(二十)
- GOF23的一些总结(一)
- GOF23的一些总结(三)
- GOF23的一些总结(四)
- GOF23的一些总结(五)
- GOF23的一些总结(六)
- GOF23的一些总结(七)
- GOF23的一些总结(八)
- GOF23的一些总结(九)
- GOF23的一些总结(十)
- GOF23的一些总结(十二)
- GOF23的一些总结(十三)
- GOF23的一些总结(十四)
- GOF23的一些总结(十五)
- STM-32中的中断
- const
- 18、Power Query-SQL筛选
- navbar (Bootstrap)
- c#简单打字游戏
- GOF23的一些总结(二十一)
- Login/index.html
- 基于寄存器与基于栈的虚拟机
- 如何进行SuperMap iServer服务端开发
- hibernate配置文件hibernate.cfg.xml和.hbm.xml的详细解释
- Login/LoginAction.class.php
- 【软件测试】软件质量标准与测试依据和规范
- 使用任务并行库(1)
- 验证码