Java中设计模式之观察者模式

    xiaoxiao2024-12-25  58

    观察者模式定义:

    观察者模式又被称为发布-订阅模式,在对象之间定义一对多的关系,这样在一个对象改变状态,依赖它的对象就会收到通知。

    观察者模式一般用于实现订阅功能的场景,例如公众号订阅、微博订阅、抖音关注;当我们订阅的人发布了新动态,我们就会收到。

    代码演示:

    package com.lzw.observer; /** * 抽象被观察者接口 * 含有增加、删除、通知观察者的方法 * @author Administrator * @version 创建时间:2019年5月26日 下午3:29:52 */ public interface Observerable { public void registerObserver(Observer observer); public void deleteObserver(Observer observer); public void notifyObserver(); } package com.lzw.observer; /** * 抽象观察者接口 * update()方法,当被观察者调用notifyObservers()方法时,观察者的update()方法会被回调。 * @author Administrator * @version 创建时间:2019年5月26日 下午3:33:51 */ public interface Observer { public void updateMessage(String message); } package com.lzw.observer; import java.util.ArrayList; import java.util.List; /** * 被观察者 * 实现了Observerable接口,具体实现三个方法 * @author Administrator * @version 创建时间:2019年5月26日 下午3:41:19 */ public class ObservedServer implements Observerable { private List<Observer> list; private String message; public ObservedServer() { list = new ArrayList<Observer>(); } @Override public void registerObserver(Observer observer) { list.add(observer); } @Override public void deleteObserver(Observer observer) { list.remove(observer); } @Override public void notifyObserver() { for(int i = 0; i < list.size(); i++) { Observer oserver = list.get(i); oserver.updateMessage(message); } } public void setInfomation(String s) { this.message = s; System.out.println("微信服务更新消息: " + s); //消息更新,通知所有观察者 notifyObserver(); } } package com.lzw.observer; /** * 观察者 * @author Administrator * @version 创建时间:2019年5月26日 下午3:47:52 */ public class User implements Observer{ private String name; private String message; public User(String name) { this.name = name; } @Override public void updateMessage(String message) { this.message = message; read(); } public void read() { System.out.println(name + " 收到推送消息: " + message); } }

    测试类

    package com.lzw.observer; public class Test { public static void main(String[] args) { ObservedServer server = new ObservedServer(); Observer observer1 = new User("张三"); Observer observer2 = new User("李四"); Observer observer3 = new User("王五"); server.registerObserver(observer1); server.registerObserver(observer2); server.registerObserver(observer3); server.setInfomation("Java是世界上最好的语言。不接受任何反驳!"); System.out.println("-------------------------"); server.deleteObserver(observer1); server.setInfomation("Python是世界上最好用的语言!"); } }

    打印结果:

    服务端更新消息: Java是世界上最好的语言。不接受任何反驳! 张三 收到推送消息: Java是世界上最好的语言。不接受任何反驳! 李四 收到推送消息: Java是世界上最好的语言。不接受任何反驳! 王五 收到推送消息: Java是世界上最好的语言。不接受任何反驳! ------------------------- 服务端更新消息: Python是世界上最好用的语言! 李四 收到推送消息: Python是世界上最好用的语言! 王五 收到推送消息: Python是世界上最好用的语言!

     

    其他模式:

    工厂模式

    单例模式

    最新回复(0)