观察者模式
【摘要】
定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
优点: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)