观察者模式
来源:互联网 发布:禅道linux一键安装包 编辑:程序博客网 时间:2024/06/07 06:26
- 首先看看UML图:
注:UML图与类图关系- 关联association
作为类的属性,如上图所示,Observer 对象作为Subject类的属性Field - 依赖dependency
作为类的方法的参数, 如上图所示,Observer 对象作为方法attach中的参数
抽象观察者:
- 关联association
public interface Observer { public void update(String message);}
具体观察者(ConcreteObserver):
public class WeixinUser implements Observer{ private String name; public WeixinUser(String name){ this.name = name; } @Override public void update(String message){ System.out.println(name +"-"+message); }}
抽象的被观察者(Subject)
public interface Subject { /** *增加订阅者 **/ public void attach(Observer observer); /** *增加订阅者 **/ public void detach(Observer observer); /** * 通知订阅者更新消息 */ public void notify(String message);}
抽象的被观察者(Subject)
public class CertainSubject implements Subject {private List<Observer> weixinUserList = new ArrayList<Observer>(); @Override public void attach(Observer observer){ weixinUserList.add(observer); } @Override public void detach(Observer observer){ weixinUserList.remove(observer); } @Override public void notify(String message){ for(Observer observer:weixinUserList){ observer.update(message); } }}
客户端调用:
public class Client { CertainSubject subject = new CertainSubject(); //创建微信用户(**注册观察者**) WeixinUser user1=new WeixinUser("杨影枫"); WeixinUser user2=new WeixinUser("月眉儿"); WeixinUser user3=new WeixinUser("紫轩"); subject.attach(user1); subject.attach(user2); subject.attach(user3); subject.notify("刘望舒的专栏更新了");}}
从类CertainSubject可以看出方法notify调用被观察者Observer的update方法,所以有下图顺序图, 在观察者模式的UML图中并没有反映出该种关系
参考:
http://blog.csdn.net/lfsf802/article/details/8987267
http://blog.csdn.net/itachi85/article/details/50773358http://blog.csdn.net/itachi85/article/details/50773358
0 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 使用SIFT特征提取和K-Means方法对图片进行分类
- spring mvc+ELK从头开始搭建日志平台
- linux里的帮助命令
- 比较大小
- Linux常用命令
- 观察者模式
- 定位布局
- Collection-Map篇
- gstreamer rtcp拥塞控制
- 【laravel】我和laravel的旅程
- Android webview使用详解
- Git Stash保存临时修改
- NE555延时电路设计
- C/C++训练1---最大公约数与最小公倍数