策略模式--GOF的23个之一
2014-01-05 00:54
295 查看
策略模式--GOF的23个之一
前言:推荐《Head First 设计模式》,是它带给我设计模式,本文章均归纳来自此书,仅为学习使用,不涉及商务利益。『策略模式』定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
问题:
1、 代码在多个子类中重复。
2、 运行时的行为不容易改变。
3、 很难知道所有鸭子的全部行为。
4、 改变会牵一发动全身,造成其他鸭子不想要的改变。
5、 并非所有子类都有一个行为(并非所有鸭子都能飞)。
6、 开Flyalbe接口,造成代码无法复用。
7、 子类对同一接口有不同的实现方式(鸭子飞行的动作可能多种变化)。
层次一:找出应用中可能需要变化之处,把它们独立出来, 不要和那些不需要变化的代码混在一起。
层次二:多用组合,少用继承。
当你将两个类结合起来使用,如同本例一般,这就是组合(co m p o s i t i o n)。这种作法和『继承』不同的地方在于,鸭子的行为不是继承而来,而是和适当的行为对象『组合』而来。
『我们使用策略模式实现鸭子的各种行为。』这句话也就是告诉我们,鸭子的行为被封装进入一组类中,可以被轻易地扩充与改变。如果有需要,甚至在运行时也可以改变行为。
如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com
前言:推荐《Head First 设计模式》,是它带给我设计模式,本文章均归纳来自此书,仅为学习使用,不涉及商务利益。『策略模式』定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
问题:
1、 代码在多个子类中重复。
2、 运行时的行为不容易改变。
3、 很难知道所有鸭子的全部行为。
4、 改变会牵一发动全身,造成其他鸭子不想要的改变。
5、 并非所有子类都有一个行为(并非所有鸭子都能飞)。
6、 开Flyalbe接口,造成代码无法复用。
7、 子类对同一接口有不同的实现方式(鸭子飞行的动作可能多种变化)。
层次一:找出应用中可能需要变化之处,把它们独立出来, 不要和那些不需要变化的代码混在一起。
层次二:多用组合,少用继承。
当你将两个类结合起来使用,如同本例一般,这就是组合(co m p o s i t i o n)。这种作法和『继承』不同的地方在于,鸭子的行为不是继承而来,而是和适当的行为对象『组合』而来。
『我们使用策略模式实现鸭子的各种行为。』这句话也就是告诉我们,鸭子的行为被封装进入一组类中,可以被轻易地扩充与改变。如果有需要,甚至在运行时也可以改变行为。
如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com
相关文章推荐
- GOF 23个基本的设计模式
- GoF 23个经典的设计模式13--行为模式之 责任链模式(未完代续)
- MM与GOF的23个设计模式
- GOF 23个基本的设计模式
- GoF 23个设计模式通用类图(含下载)
- 23个GOF23设计模式的定义
- 简单工厂模式--不是GOF的23个的模式
- 23个GOF23设计模式的定义
- 工厂方法模式--GOF的23个之一
- 抽象工厂模式--GOF的23个之一
- 《设计模式》学习笔记(1)——23个GoF模式概览
- 单例模式--GOF的23个之一
- GoF的23个经典设计模式
- GoF 23个设计模式通用类图(含下载)
- GoF 23个经典的设计模式03--创建模式之工厂方法(未完代续)
- GoF 23个经典的设计模式01--创建模式之抽象工厂(未完代续)
- GoF的23个经典设计模式
- GoF 23个经典的设计模式02--创建模式之创建者模式(未完代续)
- GoF 23个经典的设计模式04--创建模式之原型模式(未完代续)
- GoF 23个经典的设计模式05--创建模式之单例模式(未完代续)