class TreePanel extends JPanel { JTree tree; ... }
class FilePanel extends JPanel { public FilePanel(JTree tree){...} ... } 或者將一個組件線程化,不停地監聽另一個組件的變化,然后作出相應的反映,比如:
class TreePanel extends JPanel { JTree tree; ... }
class FilePanel extends JPanel implements Runnable { public void run() { while (true) { //監聽tree的變化 } ... } ... } 這樣確實可以達到我們的目的,但是第一種方案顯然不利于松散耦合,第二種方案比較占用系統資源。通過學習設計模式,我們發現可以用Observer模式來解決這個問題。
2. Observer模式
設計模式分為創建型、結構型和行為型,其中行為型模式專門處理對象間通信,指定交互方式等,Observer模式就是屬于行為型的一種設計模式。按照“四人幫”(Gang of Four)在“Design Patterns”里的定義,Observer模式“定義對象間的一種一對多的依靠關系,當一個對象的狀態發生改變時, 所有依靠于它的對象都得到通知并被自動更新”,這個描述正好符合我們對“組件通信”問題的需求。讓我們先看看Observer模式的結構: