观察者模式案例
思路:使用


抽象类观察者
package com.itcast.observer2;/**** 抽象观察者* 定义了一个update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。* @author jstao**/
public interface Observer {public void update(String message);
}
观察者
package com.itcast.observer2;/*** 观察者* 实现了update方法* @author jstao**/
public class User implements Observer {private String name;private String message;public User(String name) {this.name = name;}@Overridepublic void update(String message) {this.message = message;read();}public void read() {System.out.println(name + " 收到推送消息: " + message);}}
package com.itcast.observer2;/**** 抽象被观察者接口* 声明了添加、删除、通知观察者方法* @author jstao**/
public interface Observerable {public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObserver(String message);}
被观察者,也就是微信公众号服务
package com.itcast.observer2;import java.util.ArrayList;
import java.util.List;/*** 被观察者,也就是微信公众号服务* 实现了Observerable接口,对Observerable接口的三个方法进行了具体实现* @author jstao*/
public class WechatServer implements Observerable
{//注意到这个List集合的泛型参数为Observer接口,设计原则:面向接口编程而不是面向实现编程private List list;private String message;public WechatServer(){list = new ArrayList();}@Overridepublic void registerObserver(Observer o){list.add(o);}@Overridepublic void removeObserver(Observer o){if (o!=null){list.remove(o);}}//遍历@Overridepublic void notifyObserver(String message){for (int i = 0; i < list.size(); i++){Observer observer = list.get(i);observer.update(message);}}public void setInfomation(String s){this.message = s;System.out.println("微信服务更新消息: " + s);//消息更新,通知所有观察者notifyObserver(message);}}
测试
1.当微信服务器发布数据后,所有订阅者收到了数据,
2.并且当删除一个订阅者后,则订阅者收不到数据了!
调用观察者实例的方法
@RequestMapping("/observer2")public void observer2Test(){WechatServer server = new WechatServer();Observer userZhang = new User("ZhangSan");Observer userLi = new User("LiSi");Observer userWang = new User("WangWu");server.registerObserver(userZhang);server.registerObserver(userLi);server.registerObserver(userWang);server.setInfomation("PHP是世界上最好用的语言!");System.out.println("----------------------------------------------");server.removeObserver(userZhang);server.setInfomation("JAVA是世界上最好用的语言!");}
微信服务更新消息: PHP是世界上最好用的语言!
ZhangSan 收到推送消息: PHP是世界上最好用的语言!
LiSi 收到推送消息: PHP是世界上最好用的语言!
WangWu 收到推送消息: PHP是世界上最好用的语言!
----------------------------------------------
微信服务更新消息: JAVA是世界上最好用的语言!
LiSi 收到推送消息: JAVA是世界上最好用的语言!
WangWu 收到推送消息: JAVA是世界上最好用的语言!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
