1. 程式人生 > 實用技巧 >playbook條件語句

playbook條件語句

觀察者模式

觀察者模式有兩個核心物件,主題和觀察者,一般來說主題不用知道誰是他的觀察者,只需要呼叫方法通知全體,但其缺點是必須依賴於這些觀察者物件,這可以通過依賴委託來改進,這種模式能夠實現解耦,讓雙方都依賴於抽象而不依賴具體,通常用在觀察者自身改變時也需要改變和他一樣的觀察者的狀態

Subject.java

public abstract class Subject {
    List<Observer> observerList = new ArrayList<>();

    public void add(Observer observer){
        observerList.add(observer);
    }

    public void delete(Observer observer){
        observerList.remove(observer);
    }

    public void send(){
        for (Observer observer:observerList){
            observer.modify();
        }
    }
}

SpecificSubject.java

public class SpecificSubject extends Subject {
    private String subjectState;

    public String getSubjectState() {
        return subjectState;
    }

    public void setSubjectState(String subjectState) {
        this.subjectState = subjectState;
    }
}

Observer.java

public abstract class Observer {
    public abstract void modify();
}

SpecificObserver.java

public class SpecificObserver extends Observer {

    private SpecificSubject subject;
    private String name;
    private String observerState;

    public SpecificObserver(SpecificSubject subject, String name) {
        this.subject = subject;
        this.name = name;
    }

    public SpecificSubject subject(){
        return subject;
    }

    @Override
    public void modify() {
        observerState = subject.getSubjectState();
        System.out.println(name+" "+observerState);
    }
}

TestObserver.java

public class TestObserver {
    public static void main(String[] args) {
        SpecificSubject subject = new SpecificSubject();
        subject.setSubjectState("ok");
        Observer observer1 = new SpecificObserver(subject,"one");
        Observer observer2 = new SpecificObserver(subject,"two");
        subject.add(observer1);
        subject.add(observer2);
        subject.send();
    }
}

Run result

one ok
two ok