0-前言
观察者模式定义:定义了一种一对多的依赖关系让多个观察者对象同事监听某一主题对象。
这个主题对象在状态发生改变时,会通知所有观察者对象,使他们能够自动更新自己;
1-实现
1-1、简单UML图:
1-2、代码实现
//1、Sujcet抽象父类(通知者父类)abstract class ManSubject{ private List<ManObserver> observers = new ArrayList(); //观察者列表 public String MyName; //名字 private String StateMessage; //要通知的消息 public ManSubject() { } //A、加入观察者 public void Attach(ManObserver _Observer) { observers.add(_Observer); } //B、通知 public void NotifyAll() { for (ManObserver item : observers) { item.Update(); } } //C、设置要通知的消息 public String getStateMessage() { return StateMessage; } public void setStateMessage(String stateMessage) { StateMessage = stateMessage; }}//1-1、具体通知者class ManSubjectA extends ManSubject{ public ManSubjectA() { this.MyName = "三弟(通知者)"; }}//----------------------------------------------------//2、观察者父类abstract class ManObserver{ public String MyName; public ManSubject subject; public ManObserver(String _name,ManSubject _subject) { this.MyName = _name; this.subject = _subject; } //收到通知后更新自己 public abstract void Update();}//2-1、具体观察者Aclass ManObserverA extends ManObserver{ public ManObserverA(String _name,ManSubject _subject) { super(_name, _subject); } @Override public void Update() { System.out.println("---------------收到【"+subject.MyName+"】的消息【"+subject.getStateMessage()+"】"); System.out.println(MyName + "赶紧关闭了动画片去干活"); }}//2-2、具体观察者Bclass ManObserverB extends ManObserver{ public ManObserverB(String _name,ManSubject _subject) { super(_name, _subject); } @Override public void Update() { System.out.println("---------------收到【"+subject.MyName+"】的消息【"+subject.getStateMessage()+"】"); System.out.println(MyName + "赶紧放下手机游戏去干活"); }}
客户端
//通知者 ManSubject manSubject = new ManSubjectA(); //观察者 ManObserver manObserverA = new ManObserverA("大姐",manSubject); ManObserver manObserverB = new ManObserverB("二哥",manSubject); //将观察者加入通知者中 manSubject.Attach(manObserverA); manSubject.Attach(manObserverB); //发布通知,通知各观察者 manSubject.setStateMessage("老爸拖着大棍子回来了"); manSubject.NotifyAll();
运行结果
2-应用场景简单总结
1、当一个模型的一方面必须依赖另一方面时;
2、当一个对象的改变需要同事改变多个对象时;
3、当一个对象必须通知其他对象,但又不能紧耦合时;
无废话设计模式(15)行为型模式跨境电商的物流服务专题培训会、 "促眼镜转型升级·创品牌发展之路"互联网与眼镜转型峰会、 亚马逊后台页面基础设置、 P卡爆出重大安全隐患:竟将卖家资金流水泄露给竞争对手、 什么是亚马逊SFP?在Amaozn为什么要做SFP?、 疫情影响之下,跨境电商卖家的应对策略?、 怎么做地铁去福口口岸?、 报了一个西冲两日游的旅游团需要准备什么?、 阴雨天又要来了,元旦前后寒冷?、
No comments:
Post a Comment