观察者模式

举报
小鲍侃java 发表于 2021/09/09 23:59:23 2021/09/09
【摘要】 定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 优点:1.观察者和被观察者是抽象耦合的 缺点:1.目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。            2.当观察者对象很多...

定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

优点:1.观察者和被观察者是抽象耦合的

缺点:1.目标与观察者之间的依赖关系并没有完全解除,而且有可能出现循环引用。

           2.当观察者对象很多时,通知的发布会花费很多时间,影响程序的效率。

使用场景:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

原理:在抽象类里有一个 ArrayList 存放观察者们。

类图:

栗子

观察者做出相应行为的方法的接口


public interface Observer {

    void update(Observable o);
    
}

观察者的实现类

public class ConcreteObserver1 implements Observer{

    public void update(Observable o) {
        System.out.println("观察者1做出相应");
    }

}
public class ConcreteObserver2 implements Observer{

    public void update(Observable o) {
        System.out.println("观察者2做出相应");
    }

}

被观察者

public class Observable {

    List<Observer> observers = new ArrayList<Observer>();
    
    public void addObserver(Observer o){
        observers.add(o);
    }
    
    public void changed(){
        System.out.println("我是被观察者,我已经发生变化了");
        notifyObservers();//通知观察自己的所有观察者
    }
    
    public void notifyObservers(){
        for (Observer observer : observers) {
            observer.update(this);
        }
    }
}

调用

public class Client {

    public static void main(String[] args) throws Exception {
        Observable observable = new Observable();
        observable.addObserver(new ConcreteObserver1());
        observable.addObserver(new ConcreteObserver2());
        
        observable.changed();
    }
}

 

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/102670152

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。