观察者模式

简介: 观察者模式

观察者模式

1.观察者模式原理

观察者模式定义:简单地说,观察者定义了一个一对多的依赖关系,让一个或多个观察者对象监察一个主题对象,这样一个主题对象在状态的变化就能够通知所有的依赖于此对象的那些观察者对象,使这些观察者对象能够自动更新。

2.观察者模式实现:

  • 具体被观察者接口:
package com.lili.observer;
/**
 * 被观察者接口
 *
 * @author: QiJingJing
 * @create: 2021/7/18
 */
public interface MessageSubject {
    /**
     * 注册观察者
     */
    void registerObserver(Observer o);
    /**
     * 移除观察者
     */
    void removeObserver(Observer o);
    /**
     * 通知所有观察者
     */
    void notifyObservers();
}
  • 具体观察者接口:
package com.lili.observer;
/**
 * 观察者接口
 *
 * @author: QiJingJing
 * @create: 2021/7/18
 */
public interface Observer {
    /**
     * 更新消息
     */
    public void update(String message);
}
  • 被观察者实现:
package com.lili.observer;
import java.util.ArrayList;
import java.util.List;
/**
 * 具体的被观察者对象
 *
 * @author: QiJingJing
 * @create: 2021/7/18
 */
public class Message implements MessageSubject {
    // 维护的观察者列表
    private List<Observer> list = new ArrayList<>();
    private String message;
    public void setMessage(String message) {
        this.message = message;
        notifyObservers();
    }
    @Override
    public void registerObserver(Observer o) {
        list.add(o);
    }
    @Override
    public void removeObserver(Observer o) {
        list.remove(o);
    }
    @Override
    public void notifyObservers() {
        for (Observer observer : list) {
            observer.update(message);
        }
    }
}
  • 观察者实现:
package com.lili.observer;
/**
 * 具体的被观察者对象
 *
 * @author: QiJingJing
 * @create: 2021/7/18
 */
public class User implements Observer {
    private String name;
    public User(String name) {
        this.name = name;
    }
    @Override
    public void update(String message) {
        System.out.println("[" + name + "]" + "收到消息:" + message);
    }
}
  • 测试代码:
package com.lili.observer;
/**
 * @author: QiJingJing
 * @create: 2021/7/18
 */
public class Test {
    @org.junit.Test
    public void testObserver() {
        // 创建一个被观察者对象
        Message message = new Message();
        // 创建三个观察者对象
        Observer user1 = new User("lili");
        Observer user2 = new User("tom");
        Observer user3 = new User("vice");
        message.registerObserver(user1);
        message.registerObserver(user2);
        message.registerObserver(user3);
        // 发出消息
        message.setMessage("亲们,么么哒");
    }
}

运行结果:

[lili]收到消息:亲们,么么哒
[tom]收到消息:亲们,么么哒
[vice]收到消息:亲们,么么哒


目录
相关文章
|
5月前
|
设计模式 消息中间件 Java
观察者模式
观察者模式
48 1
|
5月前
|
C++
【C++】—— 观察者模式
【C++】—— 观察者模式
|
5月前
|
设计模式 JavaScript 开发者
详细讲解什么是观察者模式
详细讲解什么是观察者模式
|
关系型数据库 API
观察者模式解读
观察者模式解读
|
5月前
|
设计模式 Java
【观察者模式】 ——每天一点小知识
【观察者模式】 ——每天一点小知识
5 # 观察者模式
5 # 观察者模式
30 0
|
设计模式
观察者模式(上)
观察者模式(上)
79 0
|
XML 设计模式 Java
观察者模式(下)
观察者模式(下)
56 0
|
设计模式
我学会了,观察者模式
观察者模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
128 0
我学会了,观察者模式
|
存储
深入剖析观察者模式
深入剖析观察者模式
151 0