赞
踩
目录
观察者模式(Observer Pattern)是一种行为型设计模式,它定义了一种一对多的依赖关系,使得当一个对象的状态发生改变时,所有依赖于它的对象都会自动收到通知并更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。
主题角色
- package com.common.demo.pattern.observer;
-
- import java.util.Vector;
-
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 主题角色
- * @date 2023/08/07 10:37:05
- */
- public abstract class Subject {
- private Vector<Observer> obs = new Vector();
-
- public void addObserver(Observer obs) {
- this.obs.add(obs);
- }
-
- public void delObserver(Observer obs) {
- this.obs.remove(obs);
- }
-
- protected void notifyObserver() {
- for (Observer o : obs) {
- o.update();
- }
- }
-
- public abstract void doSomething();
- }
具体主题角色
- package com.common.demo.pattern.observer;
-
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 具体主题角色
- * @date 2023/08/07 10:39:23
- */
- public class ConcreteSubject extends Subject{
-
- @Override
- public void doSomething(){
- System.out.println("被观察者事件发生改变");
- this.notifyObserver();
- }
- }
观察者角色
- package com.common.demo.pattern.observer;
-
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 观察者角色 观察者接口
- * @date 2023/08/07 10:30:26
- */
- public interface Observer {
- void update();
- }
具体观察者角色
- package com.common.demo.pattern.observer;
-
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 具体观察者角色 观察者角色A
- * @date 2023/08/07 10:40:54
- */
- public class ConcreteObserverA implements Observer{
-
- @Override
- public void update() {
- System.out.println("观察者A收到信息,并进行业务处理");
- }
- }
- package com.common.demo.pattern.observer;
-
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 具体观察者角色 观察者角色B
- * @date 2023/08/07 10:40:54
- */
- public class ConcreteObserverB implements Observer{
-
- @Override
- public void update() {
- System.out.println("观察者B收到信息,并进行业务处理");
- }
- }
测试类
- package com.common.demo.pattern.observer;
-
- /**
- * @author Evan Walker 昂焱数据: https://www.ayshuju.com
- * @version 1.0
- * @desc 测试类
- * @date 2023/08/07 10:46:55
- */
- public class ClientTest {
-
- public static void main(String[] args) {
- Subject sub = new ConcreteSubject();
- sub.addObserver(new ConcreteObserverA());
- sub.addObserver(new ConcreteObserverB());
- sub.doSomething();
-
- }
- }
测试截图
更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。