当一个类的定义中有递归出现时,就需要用到 composite 模式。
比如树。树的结点可以是叶子结点,也可以是另一棵子级树。也就是树是由子树(叶子可看成是退化的子树)构成的,出现的递归,所以使用 composite 模式。
想想马三立的相声《挠挠》,那个秘方可看成是退化了的 composite。
interface Openable { void Open(); }
class Script implements Openable // 纸条 { public void Open() { System.out.println("挠挠\n"); } }
public class Package implements Openable // 纸包 { private Openable content;
public Package(Script s) { content = s; }
public Package(Package p) { content = p; }
public void Open() { System.out.print("打开一层纸包\n"); content.Open(); } }
public class Secret implements Openable // 祖传秘方 { private Openable secret; public Secret() { secret = new Package(new Package(new Package(new Package(new Package(new Package(new Package(new Package(new Package(new Package(new Script())))))))))); }
public void Open() { secret.Open(); } }
|