当代码耦合时,将不同系统捆绑成一个代码球,此时就可以使用该模式从而允许单一的实体跨越多个领域而不会导致这些领域彼此耦合,为了保持领域之间相互分离,将每部分代码放入各自的组件类中。
使用场景:
1.有一个涉及了多个领域的类,而你想要保持这些领域互相隔离
2.一个类正在变大而且越来越难以使用
3.想要能定义一系列分享不同能力的类,但是使用继承无法让你精确选取要重用的部分
使用组件必然会导致多一层跳转,在性能攸关的内部循环中,这种跳转也许会导致糟糕的性能。
设计决策:
1.谁将单块对象分割为多个分离的组件拼在一起?
如果对象创建组件,也就是用硬编码的组件来组装自己,保证对象总是能拿到需要的组件,但重新设置对象比较困哪
如果外部代码提供组件,对象变成组件容器,更加灵活,可以与具体的组件类型解耦
2.组件之间要如何通信?
通过修改容器对象的状态,可以保持组件解耦,需要将组件分享的任何数据存储在容器中,这样组件的通信基于组件 运行的顺序,该方法对每个对象都有的数据很好用,否则可能会存在内存浪费。
组件有要交流的组件的引用,它们直接交流而不通过容器类。这样简单快捷,但会将交流的组件类紧紧的捆绑在一 起,对于那些紧密相关的领域组件有用。
在容器类中建立小小的消息系统,允许组件相互发送消息。使同级组件解耦,组件之间唯一的耦合就是它们发送的消息,而且容器无需知道组件使用了什么数据,只是将消息发出去。对于不那么重要的通信很有用,发送后不管的特性。