设计模式之观察者模式

时间:2015-07-08 00:19:51   收藏:0   阅读:109

观察者模式

定义一种一对多的依赖关系,让多个观察对象同时监听某一主题对象。这个主题对象在状态发生变化时会通知所有的观察者对象,使他们自动更新状态

Subject

package com.hml.observer;

import java.util.ArrayList;
import java.util.List;

public  class Subject {
    List<Observer> observers = new ArrayList<Observer>();
    
    public void addObserver(Observer o) {
        observers.add(o);
    }
    
    public void deleteObserver(Observer o) {
        observers.remove(o);
    }
    
    public void notifyChange() {
        for (Observer o : observers) {
            o.update();
        }
    }
}

Observer

package com.hml.observer;

public interface Observer {
    public void update();
}

ConcreateObserverA

package com.hml.observer;

public class ConcreateObserverA implements Observer {

    public void update() {
        System.out.println("A update");
    }

}

ConcreateObserverB

package com.hml.observer;

public class ConcreateObserverB implements Observer {

    public void update() {
        System.out.println("B update");
    }

}

Test

package com.hml.observer;
public class Test {
    public static void main(String[] args) {
        Subject subject = new Subject();
        subject.addObserver(new ConcreateObserverA());
        subject.addObserver(new ConcreateObserverB());
        subject.notifyChange();
    }
}

类图

技术分享

将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维护一致性而使各个类紧密耦合,这样会给维护、扩展和重用带来不便。而观察者模式的关键是主题Subject和观察者Observer,一个Subject可以有人以数量的依赖它的Observer,一旦Subject的状态发生了变化,所有的Observer都可以得到通知。Subject发出通知并不需要知道谁是他的观察者,也就是说,具体观察者是谁,他根本不需要知道。而任何一个具体的观察者都不知道也不需要知道其他观察者的存在。因此当一个对象的改变需要同时改变其他的对象时,就可以使用观察者模式。

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!