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

观察者模式

时间:2016-06-09 23:44:55      阅读:385      评论:0      收藏:0      [点我收藏+]

标签:

观察者模式:一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。

观察者

(Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(List)里。

被观察者

被观察对象(Subject)发生了某种变化,从容器中得到所有注册过的观察者,将变化通知观察者。

 

技术分享

代码实例

//被观察者接口
public interface Subject {
    
    void add(Observer observer);
    
    void remove(Observer observer);
    
    void notifyObserver();
}

//具体被观察者类
public class ConcreteSubject implements Subject{
    
    private List<Observer> list = new ArrayList<>();

    @Override
    public void add(Observer observer) {
        
        list.add(observer);
    }

    @Override
    public void remove(Observer observer) {
        list.remove(observer);
        
    }

    @Override
    public void notifyObserver() {
        
        for (Observer observer : list) {
            
            observer.update();
        }
    }
}

//观察者接口
public interface Observer {
    
    void update();
}

//具体观察者类1
public class ConcreteObserver1 implements Observer {

    @Override
    public void update() {
        
        System.out.println("观察者1已更新!");
        System.out.println("--------------------");
    }
}

//具体观察者类2
public class ConcreteObserver2 implements Observer {

    @Override
    public void update() {
        
        System.out.println("观察者2已更新!");
        System.out.println("--------------------");
    }
}

//测试类
public class Test {
    
    public static void main(String[] args) {
        
        Subject subject = new ConcreteSubject();
        Observer ob1 = new ConcreteObserver1();
        Observer ob2 = new ConcreteObserver2();
        subject.add(ob1);
        subject.add(ob2);
        subject.notifyObserver();
    }
}

输出结果:
观察者1已更新!
--------------------
观察者2已更新!
--------------------

观察者模式

标签:

原文地址:http://www.cnblogs.com/crazy2016/p/5572871.html

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