playbook條件語句
阿新 • • 發佈:2020-10-07
觀察者模式
觀察者模式有兩個核心物件,主題和觀察者,一般來說主題不用知道誰是他的觀察者,只需要呼叫方法通知全體,但其缺點是必須依賴於這些觀察者物件,這可以通過依賴委託來改進,這種模式能夠實現解耦,讓雙方都依賴於抽象而不依賴具體,通常用在觀察者自身改變時也需要改變和他一樣的觀察者的狀態
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