《设计模式的艺术》笔记——结构型模式

最近看了刘伟写的《设计模式的艺术》, 第一次具体的学习设计模式,整理了一下笔记。

每种设计模式基本上都只写了定义和结构图,只是写给自己看的,方便回忆使用场景、优缺点等。

适配器模式

  1. 定义:将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。

  2. 对象适配器模式:适配器与适配者之间是关联关系。

  3. 结构图:

    designpattern16.jpg

  4. 类适配器模式:适配器与适配者之间是继承关系。(较少使用)

  5. 类适配器模式结构图:

    designpattern17.jpg

  6. 双向适配器模式:在适配器中同时包含对目标类和适配者类的引用。

  7. 双向适配器模式结构图:

    designpattern18.jpg

  8. 缺省适配器模式:当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性的覆盖父类的某些方法来实现需求。(单接口适配器模式)

  9. 缺省适配器模式结构图:

    designpattern19.jpg

桥接模式

  1. 使用抽象关联取代了传统的多层继承。

  2. 定义:将抽象部分与其实现部分分离,使它们都可以独立的变化。

  3. 桥接模式结构图:

    designpattern20.jpg

  4. 适配器模式与桥接模式的连用:

    designpattern21.jpg

组合模式

  1. 通过一种巧妙的设计方案使得用户可以一致性地处理整个树形结构或者树形结构的一部分。

  2. 定义:组合多个对象形成树形结构以表示具有“整体——部分”关系的层次结构。

  3. 组合模式结构图:

    designpattern22.jpg

  4. 组合模式的关键是定义了一个抽象构件类。它既可以代表叶子,又可以代表容器。既可以包含叶子,也可以包含容器。

  5. 透明组合模式:抽象构建中生命了所有用于管理成员对象的方法,使得客户端可以相同对待所有对象。缺点是不够安全,运行阶段调用叶子对象不该有的方法会出错。

    designpattern23.jpg

  6. 安全组合模式:抽象构建中没有声明任何用于管理成员对象的方法,而是在Composite类中声明并实现这些方法,这样做比较安全,但是不够透明。

    designpattern24.jpg

装饰模式

  1. 在不改变一个对象本身功能的基础上给对象增加额外的新行为。

  2. 用于替代继承,适用对象之间的关联关系取代类之间的继承关系。

  3. 定义:动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更加灵活。

  4. 装饰模式结构图:

    designpattern25.jpg

  5. 透明装饰模式:让客户端透明地使用装饰之前的对象和装饰之后的对象;还可以对一个已装饰过的对象进行多次装饰。但是客户端不能单独调用装饰类新增的方法。(结构图中的模式)

  6. 半透明模式:对于客户端而言,具体构件类型是透明的,但是具体装饰类型必须指定。不能实现同一个对象的多次装饰;而且客户端要有区别的对待装饰之前的对象和装饰之后的对象。(具体装饰类新增的方法单独写出,不是写在抽象装饰类声明的operation方法中)

外观模式

  1. 定义:外部与一个子系统的通信通过一个统一的外观角色进行,为子系统中的一组接口提供一个一致的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

  2. 外观模式结构示意图:

    designpattern26.jpg

享元模式

  1. 通过共享技术实现相同或相似对象的重用。

  2. 定义:运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。

  3. 享元模式结构图:

    designpattern27.jpg

代理模式

  1. 定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

  2. 代理模式结构图:

    designpattern28.jpg

  3. 远程代理、虚拟代理、保护代理、缓冲代理、智能引用代理。