本文主要分析了模板方法模式、命令模式、责任链模式、策略模式、迭代器模式。介绍它们的定义、优缺点、使用场景,以及实例代码。
为了深刻地理解设计模式,最重要的还是动手编写代码。
我參照书中的例程又一次构想了一些更加生动、易于理解的样例,希望大家喜欢。
代码能够通过下面链接进行浏览:
这些代码都经过编译执行,保证没有错误。
- 模板方法
- 定义
- 定义一个操作中的算法框架,而将一些步骤延迟到子类中
- 角色:抽象模板、详细模板
- 长处
- 封装不变的部分。扩展可变的部分
- 提取公共部分的代码。便于维护
- 行为由父类控制、子类实现
- 使用场景
- 多个子类有公共方法时,而且逻辑结构基本同样
- 能够把重要的算法作为模板方法。把细节由子类实现
- 重构时模板方法是一个常常使用的模式,将同样的代码抽取到父类
- 定义
- 命令模式
- 定义
- 又称动作模式、事务模式
- 将一个请求封装成一个对象,从而让你把不同的请求把client參数化。对请求排队,或者记录请求日志
- 角色:命令角色、详细命令、调用者角色、接受者角色
- 长处
- 类间解耦合
- 可扩展
- 命令结合其它模式会更加优秀
- 缺点
- 项目中出现过多详细的命令类
- 使用场景
- 能够用于实现回调函数
- 须要将请求排队
- 须要将请求记录到日志
- 须要支持事务
- 定义
- 责任链模式
- 定义
- 使多个对象都有机会处理请求。从而避免了发送者和接受者的耦合。
这些对象形成一条链,并沿着这条链传递该请求。直到有对象处理请求为止
- 角色:抽象处理者、详细处理者
- 使多个对象都有机会处理请求。从而避免了发送者和接受者的耦合。
- 长处
- 将发送者和处理者分开。请求者不须要知道谁来处理。发送者不须要知道请求者是谁
- 提高系统灵活性
- 缺点
- 减少系统性能
- 不方便调试
- 使用场景
- 一个请求须要一系列处理工作
- 业务流程处理,比方审批
- 对系统进行补充扩展
- 定义
- 策略模式
- 定义
- 也叫政策模式
- 定义一组算法。将每一个算法封装起来。而且使它们之间能够相互转换
- 角色:环境、抽象策略、详细策略
- 长处
- 能够管理一组相关的算法
- 能够替换继承
- 能够避免使用多重条件转移语句
- 缺点
- client必须知道全部的策略类
- 会造成非常多策略类,能够使用享元模式解决
- 应用场景
- 多个类仅仅是在算法上不一样
- 算法须要自由切换
- 须要屏蔽算法规则的场景
- 定义
- 迭代器
- 定义
- 提供一种方法訪问一个容器中的各个对象,而又不暴露该对象的内部细节
- 角色:抽象迭代器、详细迭代器、抽象聚类、详细聚类
- 长处
- 简化了訪问容器元素的操作。具备了一个统一的遍历接口
- 封装遍历算法,使算法独立于聚类角色
- 缺点
- 让人产生序列化的错觉,从而产生错误
- 元素都是Object类型,没有类型特征(泛化能够解决这个问题)
- 应用场景
- Java集合框架中被广泛应用
- Java中一般不须要手动编写迭代器,JDK它配备了已经受够了
- 定义
版权声明:本文博主原创文章。博客,未经同意不得转载。