首页 > 其他分享 >02-设计模式-观察者模式

02-设计模式-观察者模式

时间:2023-07-15 10:33:08浏览次数:36  
标签:02 String observer void 观察者 ObserverImpl msg 设计模式

观察者模式涉及的对象:

  • 观察者接口、观察者接口的实现类
  • 被观察者接口、被观察者接口的实现类

1、观察者接口-代码:

public interface Observer {
    void update(String msg);
}

2、观察者接口的实现类-代码:

public class ObserverImpl implements  Observer{
    private String name;
    
    public ObserverImpl(String name){
        this,name = name;
    }
    
    @Override
    void update(String msg){
        System.out.println(this.name+" 观察到了数据变化,接收到数据:"+msg);
    }
    
    public String getName() {
        return name;
    }
}

3、被观察者接口-代码:

public interface Subject {
    
    // 绑定观察者
    void attcah(ObserverImpl observer);
    
    // 解绑观察者
    void detcah(ObserverImpl observer);
    
    // 将数据msg发给所有的观察者
    void toNotifyAllObserver(String msg);
}

4、被观察者接口的实现类-代码:

public class SubjectImpl implements Subject {
    
    private List<Observer> observerList = new ArrayList<>();
    
    // 绑定观察者
    void attcah(ObserverImpl observer){
        System.out.println("正在绑定到观察者:"+observer.getName());
        observerList.add(observer);
    }
    
    // 解绑观察者
    void detcah(ObserverImpl observer){
        System.out.println("正在解绑观察者:"+observer.getName());
        observerList.remove(observer);
    }
    
    // 将数据msg发给所有的观察者
    void toNotifyAllObserver(String msg){
        for (Observer observer : observerList) {
            observer.update(msg);
        }
    }
    
}

5、使用:

public class Main {
    public static void main(String[] args) {
        
        ObserverImpl observer1 = new ObserverImpl("观察者1");
        ObserverImpl observer2 = new ObserverImpl("观察者2");
        
        SubjectImpl subject = new SubjectImpl();
        
        subject.attach(observer1);
        subject.attach(observer2);
        
        subject.toNotifyAllObserver("你好!");
        
        subject.detach(observer1);
        subject.detach(observer2);        
        
        
    }
}

/*
打印结果:

    正在绑定到观察者:观察者1
    正在绑定到观察者:观察者2
    观察者1 观察到了数据变化,接收到数据:你好!
    观察者2 观察到了数据变化,接收到数据:你好!
    正在解绑观察者:观察者1
    正在解绑观察者:观察者2
*/

标签:02,String,observer,void,观察者,ObserverImpl,msg,设计模式
From: https://www.cnblogs.com/cywdder/p/17555735.html

相关文章

  • 01-设计模式-代理模式
    1、代理模式的分类代理模式分为:静态代理:在编译阶段确定了被代理对象的类型,简单。动态代理:在运行阶段确定了被代理对象的类型,复杂。2、静态代理静态代理涉及的类:一个接口,下面的例子中命名为Subject实现了接口的被代理对象RealSubject实现了接口的代理对象StaticProxy......
  • 20090211_擲筊的方式 (基礎篇)
    要問神明事情有分菩薩佛祖...需要三杯(EX:觀世音菩薩,地藏王菩薩、阿彌陀佛等等。)神..只需要一杯(EX:關聖帝君,媽祖娘娘,土地公,王母娘娘等等。) 首先要先把自己的基本資料先報上,姓名,出生的(國or農曆)年月日(時辰),住家地址..先詢問是否可以問關於XXX的事情,可否同意給個方向......
  • 2021沈阳icpc
    B.BitwiseExclusive-ORSequence题意:有\(n\)个数,他们满足\(m\)组限制,每组限制给出\(u,v\),满足a[u]^a[v]==w,求这\(n\)个数的最小值思路:对于每一组\(u,v\),按位考虑,如果\(w\)上对应位是\(0\),意味着\(a_{u},a_{v}\)这一位一样,否则不一样,这是一个二分图问题,没一位考虑一个二......
  • 145.观察者模式和发布订阅模式有什么不同
    145.观察者模式和发布订阅模式有什么不同?发布订阅模式其实属于广义上的观察者模式在观察者模式中,观察者需要直接订阅目标事件。在目标发出内容改变的事件后,直接接收事件并作出响应。而在发布订阅模式中,发布者和订阅者之间多了一个调度中心。调度中心一方面从发布者接收事件,......
  • 比Wi-Fi快100倍!Li-Fi无线传输标准802.11bb正式发布:带宽高达224GB/s
    大家对Wi-Fi可以说耳熟能详,最新标准已经演进到802.11be,即Wi-Fi7,理论速率可达30Gbps。现在,更强的来了。IEEE今日正式签署802.11bb无线传输标准,即Li-Fi,基于光波的无线传输。Li-Fi支持者认为,光比射频更可靠,由此也使得Li-Fi比Wi-Fi和5G都要更快、更安全,Li-Fi的发布,也有助于和Wi-F......
  • [已过万次测试] MIT 6.5840 2023 Lab 4 Shard KV Server TaskA, TaskB, Challenge 通
    MIT6.58402023Lab4ShardKVServerTaskA,TaskB,Challenge前言这波是终于写完了MIT6.5840的所有lab了。lab均是独立完成,没有任何参考,哈哈,还是挺有成就感的。lab4其实在上周就已经写完了,不过比较懒,拖了一周才开始写总结。本次lab4,在所有lab中,个人认为难度仅次于lab2,也......
  • 2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?
    2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?答案2023-07-14:在Kafka中,文件的布局采用了Topic/Partition的方式,每个分区对应一个物理文件夹,且在分区文件级别上实现了顺序写入。然而,当一个Kafka集群拥有大量的主题和每个主题拥有数百个分区时,在高并发写入消息的情况下,IO操作......
  • 2023下助教工作总结
    一、助教工作的具体职责和任务(1)在本学期我担任阴爱英老师《数字电路与逻辑设计》的助教,主要协助老师的工作,对同学不理解的问题进行一定的指导以及答疑解答,收集大家作业不会写的题目,给老师反馈,收集并登记学生的作业完成情况。(2)跟学生沟通,了解同学们是否能跟得上老师的进度,同学们对......
  • 2023.7.14
    早晨起来看了眼昨天没解开的题,有些难度,感觉只摸到了皮毛,不过问题不大,打开电脑下载今天免费的永劫无间,玩了几把,感觉没有什么意思,又删掉了,看了看视频,今天中午炒了盘回锅肉,下午看了看书,晚上学习了编程,明天打算玩玩恐鬼症和朋友一起。......
  • 2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?
    2023-07-14:讲一讲Kafka与RocketMQ中存储设计的异同?答案2023-07-14:在Kafka中,文件的布局采用了Topic/Partition的方式,每个分区对应一个物理文件夹,且在分区文件级别上实现了顺序写入。然而,当一个Kafka集群拥有大量的主题和每个主题拥有数百个分区时,在高并发写入消息的情况下,IO操作会变......