设计模式学习心得<组合模式 Composite>

组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。

概述


  • 意图

    将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

  • 主要解决

    它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

  • 何时使用
  1. 想表示对象的部分-整体层次结构(树形结构)。
  2. 希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
  • 如何解决

    树枝和叶子实现统一接口,树枝内部组合该接口。

  • 关键代码

    树枝内部组合该接口,并且含有内部属性 List,里面放 Component。

  • 应用实例
  1. 算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。
  2. 在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container 是树枝。
  • 优点
  1. 高层模块调用简单。
  2. 节点自由增加。
  • 缺点

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

  • 使用场景

    部分、整体场景,如树形菜单,文件、文件夹的管理。

  • 注意事项

    定义时为具体类。

原文地址:https://www.cnblogs.com/snifferhu/p/9251275.html

时间: 2024-11-10 23:17:01

设计模式学习心得<组合模式 Composite>的相关文章

设计模式学习心得&lt;适配器 Adapter&gt;

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能. 概述 意图 将一个类的接口转换成客户希望的另外一个接口. 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 主要解决 主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对象不能满足的. 何时使用 系统需要使用现有的类,而此类

设计模式学习心得----开篇

做了几年的开发工作,还停留在开发工程师的阶段,想着不能一直这样下去,觉得要为自己以后做打算了,开发常规两条路:项目管理,架构师,我选择架构师.之 所以这样选,这是保守的一个选择,用格力的广告“掌握核心科技”,只有掌握了核心技术,核心业务,才能占据主导角色.当然要成为一个合格的架构师,需要学 习的,掌握的东西要非常多,非常全面,也有很多条件,但这是我选架构师的一个最重要条件.既然已经决定了,就要学习自己欠缺的.设计模式就是之一,于是有 了这系列文章,记录学习过程中一些心得和总结. 一:为什么要用设

大话设计模式学习心得

我的理解是建立在C++上的,而书中所用的例子是java的,每一种模式我都会转化为C++中的应用来理解. 1.简单工厂模式: 我的理解是父类定义接口,子类实现接口,外加一个根据输入产生不同子类的函数.如果需要添加新实现时,需要添加子类,和修改工厂函数. 2.策略模式: 简单一点的理解是将工厂函数和父类定义在一个新的类中,那么客户端的代码就会显得简洁一些.比较重要的一点是接口和客户端的耦合度降低了.两个类改为一个类. 3.单一职责原则: 还是耦合度的问题,如果太多的功能集中在一个类中,成员变量数量的

Android学习之适配器Adapter

Adapter是个什么角色呢?其实它的作用就是View界面和数据之间的桥梁.我们可以看作是界面数据绑定的一种理解,它所操纵的数据一般都是一些比较复杂的数据,如数组,链表,数据库,集合等. 常用的适配器有: (1)ArrayAdapter:             数组作为数据源,填充的是ArrayAdapter (2)SimpleAdapter:           List作为数据源,填充的是SimpleAdapter (3)SimpleCursorAdapter: 数据来源一般都是数据库查询

java常用设计模式学习心得

学习自:http://shenzhenchufa.blog.51cto.com/730213/161581 代码来自:http://shenzhenchufa.blog.51cto.com/730213/161581 感谢博主:shenzhenchufa. 学习之余我写一些自己的心得.无心侵犯版权,用于自己学习. ------------------------- strategy(策略模式) -------------------------我们有一个设计原则:找出应用中相同之处,且不容易发生

设计模式学习心得(持续更新)

本博文仅仅是笔者自己的学习路线,归纳整理了一些好的设计模式资料. 1.策略模式 参考资料:c#设计模式-策略模式?c#设计模式之策略模式 ?C#设计模式(20)--策略者模式(Stragety Pattern) 策略模式的实现有解耦的表现--Context类 注意: 如果优化的话,可以使用抽象类,将变化的算法设为抽象方法,或虚方法,这样让子类对该方法进行实现即可,同样可以实现该需求,而且代码重用性应该会更好 2.工厂模式 参考资料:C#设计模式(3)--工厂方法模式 ?C#设计模式(1)--简单

设计模式学习心得&lt;外观模式 Facade&gt;

外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性. 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用. 概述 意图 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 主要解决 降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口. 何时使用 客户端不需要知道系统

大话设计模式学习心得2

1.迪米特法则 类之间的联系越少越好, 2.外观模式 添加一个新的类,包含子类,实现不同的组合,降低与外界的耦合,对旧代码的更新可以适用. 3.建造者模式 和外观模式有些类似吧,实现子类的各种不同的组合,也就是在内部实现接口调用顺序,而在外界只需调用具体的接口. 4.观察者模式 一个类A是观察者类,另一个类B是通知者类,B中调用A的接口,A中有B的通知号,其实耦合度还是很高的,只是有一个事件来到时,B主动调用注册在A中的方法.相当于实现了通知

设计模式学习心得4

1.组合模式 定义一个父类,其中包括所有子类的方法接口,那么对于任何一个子类来说对外界都是封闭的,外界只调用父类的接口,而不知道子类是否有实现. 2.迭代器模式 这个很常见,在C++中常常会用在标准模版类中,它的功能就是遍历一个类中的成员,而外界不知道对象的成员. 3.单例模式 这个模式就是为了只有一个实例,解决方式是将构造函数设置为私有函数,类的实例化使用一个共有静态函数接口.