软件设计模式–第三章 结构型模式–组合模式

目录

  • 第二章 结构型模式
    • 1、结构型模式概述
    • 2、组合模式
      • (1)模式的定义与特点
      • (2)模式的结构与实现
      • (3)应用场景
      • (4)扩展

第二章 结构型模式

1、结构型模式概述

结构型模式描述如何将类或对象按某种布局组成更大的结构。

  • 类结构型模式:采用来组织接口和类,
  • 对象结构型模式:采用来组合对象。
  • 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。

结构型模式分为以下7种:

  1. 代理(Proxy)模式:客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。

  2. 适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

  3. 桥接(Bridge)模式:将,使他们可以独立的变化。用组合关系代替继承关系来实现,从而降低了抽象和实现这2个可变维度的耦合度。

  4. 装饰(Decorator)模式:动态的给对象,即增加其额外的功能。

  5. 外观(Facade)模式:为多个复杂的子系统, 使这些子系统更加容易被访问。

  6. 享元(Flyweight)模式:运用共享技术来有效地。

  7. 组合(Composite)模式:,使用户对单个对象和组合对象具有一致的访问性。

注:以上7种结构型模式,除了适配器模式分为类结构型模式和对象结构型模式2种,其他的全部属于对象结构型模式。

2、组合模式

(1)模式的定义与特点

  1. 定义:

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

  • 组合模式可以清楚地定义分层次的复杂对象,通过聚合实现
  • 客户端可以一致地使用一个,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。
  • 在组合模式中增加新的和都很方便,无须对现有类库进行任何修改,符合“开闭原则”。
  • 组合模式,通过叶子节点和树枝节点的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。

(2)模式的结构与实现

  1. 结构
  • 抽象根节点(Component):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性。
  • 树枝节点(Composite):定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构。
  • 叶子节点(Leaf):叶子节点对象,其下再无分支,是系统层次遍历的最小单位。

    代码如下:

    菜单组件:不管是菜单还是菜单项,都应该继承自统一的接口(抽象根节点)

    这里的MenuComponent定义为抽象类,因为有一些共有的属性和行为要在该类中实现,Menu和MenuItem类就可以只覆盖自己需要的方法,而不用搭理不需要或方法。

    举例来说,Menu类可以包含子菜单,因此需要覆盖add()、remove()、getChild()方法。

    但是MenuItem就不应该有这些方法。这里给出的默认实现是抛出异常,你也可以根据自己的需要改写默认实现。

    树枝节点:菜单(菜单可以有多个子菜单或者子菜单项) 聚合抽象根节点

    Menu类已经实现了除了getName方法的其他所有方法,因为Menu类具有添加菜单,移除菜单和获取子菜单的功能。

    叶子节点:菜单项

    MenuItem是菜单项,不能再有子菜单,所以添加菜单,移除菜单和获取子菜单的功能并不能实现。

    测试类

    
                                                            

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年9月9日
下一篇 2022年9月9日

相关推荐