观察者设计模式

Posted 逆流而上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了观察者设计模式相关的知识,希望对你有一定的参考价值。

1.观察者接口及实现类

//一个Observer接口:
1.public interface Observer {  
2.    public void update();  
3.}  

//两个实现类:
1.public class Observer1 implements Observer {  
2.  
3.    @Override  
4.    public void update() {  
5.        System.out.println("observer1 has received!");  
6.    }  
7.}  
1.public class Observer2 implements Observer {  
2.  
3.    @Override  
4.    public void update() {  
5.        System.out.println("observer2 has received!");  
6.    }  
7.  
8.}  

 

2.订阅者接口及实现类

//订阅者接口
public interface Subject {  
2.      
3.    /*增加观察者*/  
4.    public void add(Observer observer);  
5.      
6.    /*删除观察者*/  
7.    public void del(Observer observer);  
8.      
9.    /*通知所有的观察者*/  
10.    public void notifyObservers();  
11.      
12.    /*自身的操作*/  
13.    public void operation();  
14.}  
//实现接口的抽象类
1.public abstract class AbstractSubject implements Subject {  
2.  
3.    private Vector<Observer> vector = new Vector<Observer>();  
4.    @Override  
5.    public void add(Observer observer) {  
6.        vector.add(observer);  
7.    }  
8.  
9.    @Override  
10.    public void del(Observer observer) {  
11.        vector.remove(observer);  
12.    }  
13.  
14.    @Override  
15.    public void notifyObservers() {  
16.        Enumeration<Observer> enumo = vector.elements();//放入观察者的集合,并循环遍历来调用(通知)观察者的update()方法
17.        while(enumo.hasMoreElements()){  
18.            enumo.nextElement().update();  
19.        }  
20.    }  
21.}  
//继承抽象类的具体实现类
1.public class MySubject extends AbstractSubject {  
2.  
3.    @Override  
4.    public void operation() {  
5.        System.out.println("update self!");  
6.        notifyObservers();  
7.    }  
8.  
9.}  

3.测试使用

//将所有 的观察者放入集合并调用订阅函数
public class ObserverTest {  
2.  
3.    public static void main(String[] args) {  
4.        Subject sub = new MySubject();  
5.        sub.add(new Observer1());  
6.        sub.add(new Observer2());  
7.          
8.        sub.operation();  
9.    }  
10.  
11.} 

输出结果

update self!
observer1 has received!
observer2 has received!

以上是关于观察者设计模式的主要内容,如果未能解决你的问题,请参考以下文章

设计模式之单例模式

如何为片段设置观察者

永远观察实时数据的片段

Java设计模式补充:回调模式事件监听器模式观察者模式(转)

LiveData 没有观察具有共享视图模型的子视图页面片段

如何让自定义视图观察包含片段的生命周期事件而不是活动?