观察者模式

来源:互联网 发布:全国高校网络培训中心 编辑:程序博客网 时间:2024/06/17 17:04
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

摘自搜狗百科 《观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。

package com.tiger.observer;/** *  * Message -- 被观察者接口 * @author tiger * */public interface Message {//注册入一个观察者public void register(Observer observer);//移除某位观察者public void remove(Observer observer);//通知所有观察者public void notifyObservers(String msg);}package com.tiger.observer;import java.util.ArrayList;import java.util.List;/** * 消息的实现类  被观察者 * @author tiger * */public class MessageImpl implements Message{//观察者集合List observers = new ArrayList<>();/** * 注册观察者 */@Overridepublic void register(Observer observer) {observers.add(observer);}/** * 移除观察者 */@Overridepublic void remove(Observer observer) {observers.remove(observer);}/** * 通知所有观察者 */@Overridepublic void notifyObservers(String msg) {for (Observer observer : observers) {observer.update(msg);}}}package com.tiger.observer;/** * [观察者] 接口 * @author tiger */public interface Observer {public void update(String msg);}package com.tiger.observer;/** * ObserverImpl -- 察者的实现类 * @author tiger * */public class ObserverImpl implements Observer{//实现类的姓名String name;@Overridepublic void update(String msg) {System.out.println(this.name+ " 收到 " + msg);}public ObserverImpl(String name) {this.name = name;}}package com.tiger.observer;/** * 测试类 * @author tiger */public class ObserverTest {public static void main(String[] args) {Message msg = new MessageImpl();//注册观察者Observer observer1 = new ObserverImpl("彩兰");Observer observer2 = new ObserverImpl("小红");msg.register(observer1);msg.register(observer2);System.out.println("--- 第一次通知 ---");msg.notifyObservers("今天要加班");//移除观察者msg.remove(observer1);System.out.println("--- 最终通知 ---");//消息发布msg.notifyObservers("今天要加班");}}

原创粉丝点击