设计模式之观察者模式——利用java中提供的观察者实现

Myth丶恋晨 2022-04-15 01:11 254阅读 0赞

java实现与自己实现的对比

一、不需要再定义观察者和目标的接口了,JDK帮忙定义了
二、具体的目标实现里面不需要再维护观察者的注册信息了,这在Java中的Observable类里面已经帮忙实现好了。
三、触发通知的方式有一点变化,要先调用setChanged方法,这个是Java未来帮助实现更精确的触发控制而提供的功能。
四、具体观察者的实现里面,update方法其实能同时支持推模型和拉模型,这个是java在定义的时候,就已经考虑进去了。

ConcreteSubject

  1. public class ConcreteSubject extends Observable {
  2. private String content;
  3. public String getContent() {
  4. return content;
  5. }
  6. public void setContent(String content) {
  7. this.content = content;
  8. //通知所有股东观察者
  9. //注意在通知之前,在用java中Observer模式时候,下面这句不能少
  10. this.setChanged();
  11. //然后主动通知,这里先用推的方式
  12. this.notifyObservers(content);
  13. //如果是拉的方式,我们就调用
  14. //this.notifyObservers();//默认把整个subject传过去了
  15. }
  16. }

ConcreteObserver

  1. public class ConcreteObserver implements Observer {
  2. //观察者名称的变量
  3. private String observerName;
  4. public String getObserverName() {
  5. return observerName;
  6. }
  7. public void setObserverName(String observerName) {
  8. this.observerName = observerName;
  9. }
  10. @Override
  11. public void update(Observable o, Object arg) {
  12. //第一种是推的方式
  13. System.out.println(observerName+"收到了消息,目标推送过来的是"+arg);
  14. //第二种是拉的方式
  15. System.out.println(observerName+"收到了消息,主动到目标对象中去拉,拉的内容是"+((ConcreteSubject)o).getContent());
  16. }
  17. }

测试类

  1. public class Client {
  2. public static void main(String[] args) {
  3. //创建一个目标,也可以说是被观察者
  4. ConcreteSubject subject =new ConcreteSubject();
  5. //创建观察者
  6. ConcreteObserver observer1=new ConcreteObserver();
  7. observer1.setObserverName("观察者一号");
  8. ConcreteObserver observer2=new ConcreteObserver();
  9. observer2.setObserverName("观察者二号");
  10. //注册观察者
  11. subject.addObserver(observer1);
  12. subject.addObserver(observer2);
  13. //目标更新content
  14. subject.setContent("目标内容更新了");
  15. }
  16. }

发表评论

表情:
评论列表 (有 0 条评论,254人围观)

还没有评论,来说两句吧...

相关阅读

    相关 设计模式观察模式

    前言 使用场景: 1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。 2、西游记里面悟空请求菩萨降服红孩儿,菩萨洒了一地水招来一个老乌龟,这个乌龟

    相关 设计模式观察模式

    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 即目标发生更

    相关 设计模式观察模式

    定义 当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步

    相关 设计模式观察模式

    [上一篇:设计模式之策略模式][Link 1] 故事要从气象站说起,气象站有个WeatherData对象,这个对象负责拿到所有的气象数据(温度、湿度、气压),而气象站同时也

    相关 设计模式观察模式

    1 观察者模式 当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都

    相关 设计模式——观察模式

    > 设计模式: > > 前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定。而是一套用来提高代码可复用性、可维护性、可读性、稳健性、以及安全性的解决方案