码迷,mamicode.com
首页 > 其他好文 > 详细

观察者设计模式

时间:2017-05-12 22:16:15      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:next   nts   end   observer   notify   asm   self   实现   集合   

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!

观察者设计模式

标签:next   nts   end   observer   notify   asm   self   实现   集合   

原文地址:http://www.cnblogs.com/fanfusuzi/p/6847119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!