第十一章 面向可复用性和可维护性的设计模式

第十一章 面向可复用性和可维护性的设计模式

Creational patterns 创建型模式

Factory Method pattern 工厂方法模式

  • 什么时候使用

    • 当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
    • 定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类。
  • 在这里插入图片描述

  • 在这里插入图片描述

Structural patterns 结构型模式

Adapter 适配器模式

  • 将某个类 / 接口转换为 client 期望的其他形式

  • 在这里插入图片描述

  • 在这里插入图片描述

Decorator 装饰器模式

  • 在这里插入图片描述

  • 在这里插入图片描述

    • 在这里插入图片描述

      • 在这里插入图片描述

        • 在这里插入图片描述
  • 和继承的区别

    • § 装饰器在运行时组合功能
    • – 继承在编译时组合功能
    • § 装饰器由多个协作对象组成
    • – 继承产生一个单一的、明确类型的对象
    • § 可以混搭多种装饰
    • – 多重继承在概念上很困难

Behavioral patterns 行为类模式

Strategy 策略模式

  • 解决问题

    • 有多种不同的算法来实现同一个任务,但需要client根据需要动态切换算法,而不是写死在代码里
    • 例如:排序有冒泡排序…
  • 解决方法

    • 为不同的实现算法构造抽象接口,利用delegation,运行时动态传入client倾向的算法类实例
  • 好处

    • 可轻松扩展以实现新算法
    • 将算法与客户端上下文分开
  • 在这里插入图片描述

    • 在这里插入图片描述

      • 在这里插入图片描述

        • 在这里插入图片描述

Template Method 模板模式

  • 解决问题

    • 做事情的步骤一样,但具体方法不同
    • 几个客户端共享相同的算法,但在细节上有所不同,即算法由可定制部分和不变部分组成。 公共步骤不应在子类中重复,而是需要重用。
  • 解决方法

    • 共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现
    • 使用继承和重写实现模板模式
  • 在这里插入图片描述

  • 在这里插入图片描述

    • 在这里插入图片描述

      • 在这里插入图片描述

        • 在这里插入图片描述
  • 类似白盒框架

Iterator 迭代器

  • 解决问题

    • 客户端希望遍历被放入容器/集合类的一组ADT对象,无需关心容器的具体类型(不管List还是Set)
    • 也就是说,不管对象被放进哪里,都应该提供同样的遍历方式
  • 好处

    • – 隐藏底层容器的内部实现
    • – 支持多种遍历策略,接口统一
    • – 易于更改容器类型
    • – 促进程序各部分之间的交流
  • 在这里插入图片描述

  • 在这里插入图片描述

    • 在这里插入图片描述

Visitor

  • 对特定类型的 object 的特定操作 (visit) ,在运行时将二者动态绑定到一起,该操作可以灵活更改,无需更改被 visit 的类

  • 为 ADT 预留一个将来可扩展功能的“接入点”,外部实现的功能代码可以在不改变 ADT 本身的情况下通过 delegation 接入 ADT

  • 在这里插入图片描述

  • 在这里插入图片描述

    • 在这里插入图片描述

      • 在这里插入图片描述
  • 与迭代器区别

    • 迭代器:以遍历的方式访问集合数据而无需暴露其内部表示,将“遍历”这项功能delegate到外部的iterator对象。
    • 在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活扩展/改变visitor的操作算法,而不影响ADT
  • 和策略模式区别

    • Visitor强调是的外部定义某种对ADT的操作,该操作于ADT自身关系不大(只是访问ADT),故ADT内部只需要开放accept(visitor)即可,client通过它设定visitor操作并在外部调用。
    • Strategy则强调是对ADT内部某些要实现的功能的相应算法的灵活替换。这些算法是ADT功能的重要组成部分,只不过是delegate到外部strategy类而已。
    • visitor是站在外部client的角度,灵活增加对ADT的各种不同操作(哪怕ADT没实现该操作),strategy则是站在内部ADT的角度,灵活变化对其内部功能的不同配置。

设计模式的对比

  • 共性样式1在这里插入图片描述

  • Adaptor在这里插入图片描述

  • Template在这里插入图片描述

  • 共性样式2在这里插入图片描述

  • Strategy在这里插入图片描述

  • Iterator在这里插入图片描述

  • Factory Method在这里插入图片描述

  • Visitor在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值