观察者模式
来源:互联网 发布:mac桌面下方软件 编辑:程序博客网 时间:2024/05/16 01:26
《Head First Design Patterns》观察者模式学习练习:
观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,他的所有观察者都会收到通知并自动更新。
首先,定义观察者模式:主题+观察者 = 观察者模式
以客户和客服人员为例,当有客户咨询时,需要通知每个客服人员。
其中,Subject为主题接口,Customer为顾客信息,CustomData为主题接口实现类
Observer为观察者接口,ServiceAgent为观察者接口实现类。
TestObserver为测试类。
主题:
/* * 主题 */public interface Subject {public void registerObserver(Observer ob);public void removeObserver(Observer ob);public void notifyObservers();}/* * 顾客信息 */public class Customer {//姓名private String name;//年龄private String age;//性别private String gender;public Customer(String name, String age, String gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAge() {return age;}public void setAge(String age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}}public class CustomData implements Subject{private ArrayList<Observer> observers;private Customer customer;public CustomData() {observers = new ArrayList<Observer>();}@Overridepublic void registerObserver(Observer ob) {// TODO Auto-generated method stubobservers.add(ob);}@Overridepublic void removeObserver(Observer ob) {// TODO Auto-generated method stubint i = observers.indexOf(ob);if(i>=0){observers.remove(i);}}@Overridepublic void notifyObservers() {// TODO Auto-generated method stubfor(int i=0; i<observers.size();i++){Observer ob = observers.get(i);ob.update(customer);}}public void setCustomer(Customer customer){this.customer = customer;notifyObservers();}}
观察者:/* * 观察者 */public interface Observer {public void update(Customer customer);}public class ServiceAgent implements Observer{/* * 客服名称 */private String name;public ServiceAgent(CustomData cData) {cData.registerObserver(this);}@Overridepublic void update(Customer customer) {// TODO Auto-generated method stubSystem.out.println("" + name + "已经接收到客户" + customer.getName() +"的信息");}public String getName() {return name;}public void setName(String name) {this.name = name;}}
测试类:public class TestObserver {public static void main(String[] args){CustomData customData = new CustomData();ServiceAgent agent1 = new ServiceAgent(customData);agent1.setName("agent1");ServiceAgent agent2 = new ServiceAgent(customData);agent2.setName("agent2");ServiceAgent agent3 = new ServiceAgent(customData);agent3.setName("agent3");ServiceAgent agent4 = new ServiceAgent(customData);agent4.setName("agent4");customData.setCustomer(new Customer("哈利波特", "22", "男"));customData.setCustomer(new Customer("赫敏", "22", "女"));}}
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 【数据库】MYSQL查看数据库所占空间大小容量命令
- 悄然无息第一篇:阅读一篇论文的随手记要
- nrf51822笔记之密码配对过程梳理
- window.event对象详细介绍
- JAVA环境变量配置原理详解
- 观察者模式
- 第2组UI组件:TextView及其子类
- 文章标题
- ceph中使用google perftool分析工具(整合)
- Intermediate Core Graphics(Swift)一
- javascript
- 周志华《机器学习》习题4.3
- [生存志] 第78节 左传汇总春秋大事
- html中使用sessionStorge存储数据