设计模式-合成模式

 

什么是合成模式?

合成(Composite)模式也称组合模式,合成模式是一组对象的组合,这些对象可以是容器对象,表现为组的概念。另外一些对象代表了单对象,或称叶子对象。


合成模式的意图

保证客户端调用单对象与组合对象的一致性。


合成模式的适用场景

如树形菜单、文件及文件夹管理。


合成模式的优点&缺点

优点:高层模块调用简单, 节点自由增加。

缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。


合成模式类图



合成模式特点

1)组对象允许包含单对象,也可以再包含其他的组对象(常见的错误是将组对象设计为只允许包含叶子对象)。                                                            

2)组合对象和单对象定义共同的行为。

结合这两点。就可以为组对象与单对象定义统一类型,并将该组对象建模为包含同等类型的集合。


举个栗子

下面以公司的组织形式为例。

阿里巴巴集团下面很多子公司,阿里妈妈、淘宝、天猫、阿里云等等,每个公司都有自己的部门和主要提供的服务,比如阿里巴巴主要提供B2B,淘宝主要是C2C,天猫主要是C2C,阿里云就是云计算服务了。每个公司都是独立的子公司,所以也就有着自己的研发部门、人力资源部门、市场部门等。


公司抽象类



公司实现类



部门类


测试类


运行结果



 

小农总结

组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以向处理简单元素一样处理复杂元素,想要创建层次结构,组合模式是最理想的选择。




©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 合成模式又叫整体部分模式,是将对象组织到一个树的结构中,用来描述整体与部分的关系。换句话说,用树结构表示整体与部分...
    breezedancer阅读 6,702评论 0 51
  • 摘录自:设计模式与游戏完美开发 十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式...
    su9257_海澜阅读 3,434评论 0 0
  • 合成模式 合成模式把部分和整体的关系用树结构表示出来。合成模式使得客户端把一个个单独的成分对象和有他们复合而成的合...
    码哥说阅读 2,900评论 0 0
  • 设计模式基本原则 开放-封闭原则(OCP),是说软件实体(类、模块、函数等等)应该可以拓展,但是不可修改。开-闭原...
    西山薄凉阅读 9,341评论 3 14
  • 处理输入输出的方式称为流。 Stream(流)的特性是一维的,单方向的。 流的基础类 InputStreamOut...
    旦暮何枯阅读 7,292评论 0 2