首页 > 代码库 > 【读书笔记】设计模式第五章:行为型模式

【读书笔记】设计模式第五章:行为型模式

本文主要分析了模板方法模式、命令模式、责任链模式、策略模式、迭代器模式,介绍它们的定义、优缺点、使用场景,以及实例代码。为了深刻地理解设计模式,最重要的还是动手编写代码。

我参照书中的例程重新构想了一些更加生动、易于理解的例子,希望大家喜欢。
代码可以通过以下链接进行浏览:
http://git.oschina.net/caipeichao/java-design-pattern

这些代码都经过编译运行,保证没有错误。


  • 模板方法
    • 定义
      • 定义一个操作中的算法框架,而将一些步骤延迟到子类中
      • 角色:抽象模板、具体模板
    • 优点
      • 封装不变的部分,扩展可变的部分
      • 提取公共部分的代码,便于维护
      • 行为由父类控制、子类实现
    • 使用场景
      • 多个子类有公共方法时,并且逻辑结构基本相同
      • 可以把重要的算法作为模板方法,把细节由子类实现
      • 重构时模板方法是一个经常使用的模式,将相同的代码抽取到父类
  • 命令模式
    • 定义
      • 又称动作模式、事务模式
      • 将一个请求封装成一个对象,从而让你把不同的请求把客户端参数化,对请求排队,或者记录请求日志
      • 角色:命令角色、具体命令、调用者角色、接受者角色
    • 优点
      • 类间解耦合
      • 可扩展
      • 命令结合其他模式会更加优秀
    • 缺点
      • 项目中出现过多具体的命令类
    • 使用场景
      • 可以用于实现回调函数
      • 需要将请求排队
      • 需要将请求记录到日志
      • 需要支持事务
  • 责任链模式
    • 定义
      • 使多个对象都有机会处理请求,从而避免了发送者和接受者的耦合。这些对象形成一条链,并沿着这条链传递该请求,直到有对象处理请求为止
      • 角色:抽象处理者、具体处理者
    • 优点
      • 将发送者和处理者分开,请求者不需要知道谁来处理,发送者不需要知道请求者是谁
      • 提高系统灵活性
    • 缺点
      • 降低系统性能
      • 不方便调试
    • 使用场景
      • 一个请求需要一系列处理工作
      • 业务流程处理,比如审批
      • 对系统进行补充扩展
  • 策略模式
    • 定义
      • 也叫政策模式
      • 定义一组算法,将每个算法封装起来,并且使它们之间可以相互转换
      • 角色:环境、抽象策略、具体策略
    • 优点
      • 可以管理一组相关的算法
      • 可以替换继承
      • 可以避免使用多重条件转移语句
    • 缺点
      • 客户端必须知道所有的策略类
      • 会造成很多策略类,可以使用享元模式解决
    • 应用场景
      • 多个类只是在算法上不一样
      • 算法需要自由切换
      • 需要屏蔽算法规则的场景
  • 迭代器
    • 定义
      • 提供一种方法访问一个容器中的各个对象,而又不暴露该对象的内部细节
      • 角色:抽象迭代器、具体迭代器、抽象聚类、具体聚类
    • 优点
      • 简化了访问容器元素的操作,具备了一个统一的遍历接口
      • 封装遍历算法,使算法独立于聚类角色
    • 缺点
      • 让人产生序列化的错觉,从而产生错误
      • 元素都是Object类型,没有类型特征(泛化可以解决问题)
    • 应用场景
      • Java集合框架中被广泛应用
      • Java中一般不需要手动编写迭代器,JDK中自带的已经够用了