第38章
大b:“说说组合模式的优点吧!”
小a:“组合模式定义了包含基本对象和组合对象的类层次结构。基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象了。用户不用关心到底是处理一个叶节点还是处理一个组合组件,也就是用不着为定义组合而写一些选择判断语句了,简单地说就是组合模式让客户可以一致地使用组合结构和单个对象。”
大b:“嗯,你知不知道什么是透明方式?什么是安全方式?及他们的好处。”
小a:“透明方式也就是说在component中声明所有用来管理子对象的方法中,其中包括add、remove等。这样实现component接口的所有子类都具备了add和remove。这样做的好处就是叶节点和枝节点对于外界没有区别,它们具备完全一致的行为接口。但问题也很明显,因为leaf类本身不具备add()、remove()方法的功能,所以实现它是没有意义的。安全方式也就是在component接口中不去声明add和remove方法,那么子类的leaf也不需要去实现它,而是在composite声明所有用来管理子类对象的方法。不过由于不透明,所以树叶和树枝将不具有相同的接口,客户端的调用需要做相应的判断,带来了不便。”