目录
- 第二章 结构型模式
-
- 1、结构型模式概述
- 2、组合模式
-
- (1)模式的定义与特点
- (2)模式的结构与实现
- (3)应用场景
- (4)扩展
第二章 结构型模式
1、结构型模式概述
结构型模式描述如何将类或对象按某种布局组成更大的结构。
- 类结构型模式:采用来组织接口和类,
- 对象结构型模式:采用来组合对象。
- 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。
结构型模式分为以下7种:
-
代理(Proxy)模式:客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
-
适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
-
桥接(Bridge)模式:将,使他们可以独立的变化。用组合关系代替继承关系来实现,从而降低了抽象和实现这2个可变维度的耦合度。
-
装饰(Decorator)模式:动态的给对象,即增加其额外的功能。
-
外观(Facade)模式:为多个复杂的子系统, 使这些子系统更加容易被访问。
-
享元(Flyweight)模式:运用共享技术来有效地。
-
组合(Composite)模式:,使用户对单个对象和组合对象具有一致的访问性。
注:以上7种结构型模式,除了适配器模式分为类结构型模式和对象结构型模式2种,其他的全部属于对象结构型模式。
2、组合模式
(1)模式的定义与特点
-
定义:
- 又名部分整体模式,是用于把一组相似的对象当作一个单一的对象。
- 组合模式依据树形结构来组合对象,用来表示部分以及整体层次。
- 这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
-
优点
- 组合模式可以清楚地定义分层次的复杂对象,通过聚合实现
- 客户端可以一致地使用一个,不必关心处理的是单个对象还是整个组合结构,简化了客户端代码。
- 在组合模式中增加新的和都很方便,无须对现有类库进行任何修改,符合“开闭原则”。
- 组合模式,通过叶子节点和树枝节点的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单。
(2)模式的结构与实现
- 结构
- 抽象根节点(Component):定义系统各层次对象的共有方法和属性,可以预先定义一些默认行为和属性。
- 树枝节点(Composite):定义树枝节点的行为,存储子节点,组合树枝节点和叶子节点形成一个树形结构。
- 叶子节点(Leaf):叶子节点对象,其下再无分支,是系统层次遍历的最小单位。
代码如下:
菜单组件:不管是菜单还是菜单项,都应该继承自统一的接口(抽象根节点)
这里的MenuComponent定义为抽象类,因为有一些共有的属性和行为要在该类中实现,Menu和MenuItem类就可以只覆盖自己需要的方法,而不用搭理不需要或方法。
举例来说,Menu类可以包含子菜单,因此需要覆盖add()、remove()、getChild()方法。
但是MenuItem就不应该有这些方法。这里给出的默认实现是抛出异常,你也可以根据自己的需要改写默认实现。
树枝节点:菜单(菜单可以有多个子菜单或者子菜单项) 聚合抽象根节点
Menu类已经实现了除了getName方法的其他所有方法,因为Menu类具有添加菜单,移除菜单和获取子菜单的功能。
叶子节点:菜单项
MenuItem是菜单项,不能再有子菜单,所以添加菜单,移除菜单和获取子菜单的功能并不能实现。
测试类
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!