博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java设计模式——观察者模式
阅读量:693 次
发布时间:2019-03-17

本文共 1822 字,大约阅读时间需要 6 分钟。

定义

对象之间一对多的依赖关系,当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
观察者模式有两个角色
1、Subject 观察主题对象,也可以叫被观察或者被订阅对象
2、Observer 观察者或订阅者对象,当Subject有变动,就会通知到每一个Observer
【Subject(被观察者):被观察的对象。当需要被观察的状态发生变化时,需要通知队列中所有观察者对象。Subject需要维持(添加,删除,通知)一个观察者对象的队列列表。
ConcreteSubject:被观察者的具体实现。包含一些基本的属性状态及其他操作。

Observer(观察者):接口或抽象类。当Subject的状态发生变化时,Observer对象将通过一个callback函数得到通知。

ConcreteObserver: 观察者的具体实现。得到通知后将完成一些具体的业务逻辑处理。】
应用
MVC模型-视图-控制框架也使用观察者模式,把模型当做被观察者,视图视为观察者。视图能够注册自己到模型上来获得模型的改变。
观察者模式
实例

/** * 观察者主题对象 * @author lu * @since  1.0, 2020年6月24日 */public interface Subject {
//订阅操作 void attach(Observer observer); //取消订阅操作 void detach(Observer observer); //通知变动 void notifyChanged(); }
/** * 观察者订阅人对象 * @author lu * @since  1.0, 2020年6月24日 */public interface Observer {
//接收变动通知 void update();}
/** * 观察者主题对象Subject实例化 * @author lu * @since  1.0, 2020年6月24日 */public class RealSubject implements Subject{
private List
observerList = new ArrayList<>(); @Override public void attach(Observer observer) {
observerList.add(observer); } @Override public void detach(Observer observer) {
observerList.remove(observer); } @Override public void notifyChanged() {
for (Observer observer : observerList) {
observer.update(); } } }
/** * 观察者订阅人对象实现类 * @author lu * @since  1.0, 2020年6月24日 */public class RealObject implements Observer{
@Override public void update() {
System.out.println("接收到了信息"); } }
/** * 测试 * @author lu * @since  1.0, 2020年6月24日 */public class Client {
public static void main(String[] args) {
Subject subject = new RealSubject(); Observer observier = new RealObject(); subject.attach(observier); subject.notifyChanged(); }}

运行结果:

测试结果

转载地址:http://qqbez.baihongyu.com/

你可能感兴趣的文章