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模式的结构: