《设计模式系列》---观察者模式

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

/**
 * @author stefanie zhao
 * @date 2014-8-18 下午04:47:20
 */
public abstract class Observer {

    abstract void update();
}

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

/**
 * @author stefanie zhao
 * @date 2014-8-18 下午04:48:29
 */
public class Subject {

    private List<Observer> observers = new ArrayList<Observer>();

    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void detach(Observer observer) {
        observers.remove(observer);
    }

    public void notifyA() {
        for (Observer o : observers)
            o.update();
    }
}

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

/**
 * @author stefanie zhao
 * @date 2014-8-18 下午04:48:29
 */
public class Subject {

    private List<Observer> observers = new ArrayList<Observer>();

    public void attach(Observer observer) {
        observers.add(observer);
    }

    public void detach(Observer observer) {
        observers.remove(observer);
    }

    public void notifyA() {
        for (Observer o : observers)
            o.update();
    }
}

/**
 * @author stefanie zhao
 * @date 2014-8-18 下午04:54:34
 */
public class ConcreteSubject extends Subject {

    private String subjectState;

    /**
     * @return the subjectState
     */
    public String getSubjectState() {
        return subjectState;
    }

    /**
     * @param subjectState
     *            the subjectState to set
     */
    public void setSubjectState(String subjectState) {
        this.subjectState = subjectState;
    }

}

public class Main {

    /**
     * @Description: TODO
     * @param @param args
     * @return void
     * @throws
     */
    public static void main(String[] args) {
        ConcreteSubject s = new ConcreteSubject();

        s.attach(new ConcreteObserver("A", s));
        s.attach(new ConcreteObserver("B", s));
        s.attach(new ConcreteObserver("C", s));

        s.setSubjectState("ABC");
        s.notifyA();
    }

}


你可能感兴趣的:(java,设计模式,观察者模式)