当前位置: 首页 > article >正文

观察者设计模式

package com.jmj.pattern.observer;

/*

抽象观察者类
 */
public interface Observer {
    void update(String message);

}
package com.jmj.pattern.observer;

/**
 * 抽象主题角色
 */
public interface Subject {

    //添加观察者对象
    void attach(Observer observer);

    //删除订阅者
    void detach(Observer observer);

    //通知订阅者更新消息
    void notify(String message);

}
package com.jmj.pattern.observer;

import java.util.ArrayList;
import java.util.List;

public class SubscriptionSubject implements Subject{

    //定义一个集合,用来存储多个观察者对象
    private List<Observer> weiXinUserList=new ArrayList<>();

    @Override
    public void attach(Observer observer) {
            weiXinUserList.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        weiXinUserList.remove(observer);
    }

    @Override
    public void notify(String message) {
        for (Observer observer : weiXinUserList) {
            observer.update(message);
        }
    }
}
package com.jmj.pattern.observer;

public class WeiXinUser implements Observer{

    private String name;

    public WeiXinUser(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name+"-"+message);
    }
}
package com.jmj.pattern.observer;

public class Client {

    public static void main(String[] args) {
        //1.创建公众号对象
        SubscriptionSubject subject =new SubscriptionSubject();

        //2.订阅公众号
        subject.attach(new WeiXinUser("孙悟空"));
        subject.attach(new WeiXinUser("猪悟能"));
        subject.attach(new WeiXinUser("沙悟净"));

        //3.公众号更新,发出新消息给订阅者
        subject.notify("公众号更新了");

        ;
    }

}


http://www.kler.cn/news/155210.html

相关文章:

  • ZooKeeper 如何保证数据一致性?
  • 二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树
  • CentOS配置本地源
  • Python 内置异常
  • 内存函数​(memcpy、memmove、memset、memcmp)
  • 奇葩问题:arp缓存、ip地址冲突(实际是ip地址被占用导致arp缓存出现问题)
  • GEE:不同方向的线性检测算子
  • 【C语言学习疑难杂症】第9期:关于%*s以及%*d等的使用
  • 点云从入门到精通技术详解100篇-基于三维点云的工件曲面轮廓检测与机器人打磨轨迹规划(下)
  • Raft 算法
  • C# Onnx 阿里达摩院开源DAMO-YOLO目标检测
  • 采集工具-免费采集器下载
  • ARM架构基础简介
  • SCAU:各位数字
  • python 图书馆选座小程序源码
  • css如何设置文本添加下划线
  • 深度学习 -- 卷积神经网络
  • 2023年亚太杯APMCM数学建模大赛B题玻璃温室小气候调控
  • Android实验:绑定service实验
  • 【Java面试——JUC全局观、原子类、锁、集合类、线程池、工具类】
  • 海林猴头菇 区域公用品牌形象正式发布
  • 服务器入侵如何防护,业务被攻击如何处理,服务器安全防护方案
  • 计算机网络TCP篇①
  • 【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
  • AIOps、微服务和云平台
  • 9.ROS的TF坐标变换(三):坐标系关系查看与一个案例
  • Linux /etc/hosts文件
  • 【Spring】AOP实现公共字段填充
  • 19.C++ 中将一维数组转成多维的三种方式
  • CMake语法入门篇