Gojs學習-文字塊(TextBlocks)
阿新 • • 發佈:2020-08-14
當物件間存在一對多關係時,則使用觀察者模式(Observer Pattern)。比如,當一個物件被修改時,則會自動通知依賴它的物件。觀察者模式屬於行為型模式。
使用場景:
- 一個抽象模型有兩個方面,其中一個方面依賴於另一個方面。將這些方面封裝在獨立的物件中使它們可以各自獨立地改變和複用。
- 一個物件的改變將導致其他一個或多個物件也發生改變,而不知道具體有多少物件將發生改變,可以降低物件之間的耦合度。
- 一個物件必須通知其他物件,而並不知道這些物件是誰。
- 需要在系統中建立一個觸發鏈,A物件的行為將影響B物件,B物件的行為將影響C物件……,可以使用觀察者模式建立一種鏈式觸發機制。
import javax.crypto.interfaces.PBEKey; import java.util.ArrayList; import java.util.List; /** * Description * Author cloudr * Date 2020/8/14 21:03 * Version 1.0 **/ class Publish { public int single; public List<Reader> readers = new ArrayList<>(); public void setSingle(int single) { this.single = single; notifyAllReader(); } public int getSingle() { return single; } public void addReader(Reader reader){ readers.add(reader); } public void notifyAllReader(){ for (Reader reader : readers) { reader.doSomething(); } } } class Reader{ public Publish publish = new Publish(); public void doSomething() { } } class ReadA extends Reader { public ReadA(Publish publish){ this.publish = publish; this.publish.addReader(this); } public void doSomething(){ System.out.println("I'm A, single =" + publish.getSingle()); } } class ReadB extends Reader{ public ReadB(Publish publish){ this.publish = publish; this.publish.addReader(this); } public void doSomething(){ System.out.println("I'm B, single ="+ publish.getSingle()); } } public class PublishReaderDemo{ public static void main(String[] args) { Publish publish = new Publish(); Reader readerA = new ReadA(publish); Reader readerB = new ReadA(publish); publish.setSingle(1); publish.setSingle(2); } }