GoF行为型模式-策略模式

发布于:2021-09-23 22:41:39

第 5 章 GoF-行为型模式
第 5 章 GoF-行为模式

5.1 Chain of Responsibility(责任链模式) 5.2 Command Pattern(命令模式) 5.3 Interpreter Pattern(解释器模式) 5.4 Iterator Pattern(迭代器模式) 5.5 Mediator Pattern (中介者模式)

5.6 Memento Pattern(备忘录模式)
5.7 Observer Pattern(观察者模式) 5.8 State Pattern(状态模式)

5.9 Strategy Pattern(策略模式)
5.10 Template Method Pattern(模板方法模式)
1

5.11 Visitor Pattern(访问者模式)

第 5 章 GoF-行为模式

5.9 Strategy Pattern (策略模式)

GoF定义:
? 定义一系列的算法,把它们一个个封装起来,并且使 它们可相互替换。本模式使得算法可独立于使用它 的客户而变化。

2

适应范围
第 5 章 GoF-行为模式

1) 有多个的对象可以处理一个请求,哪个对象处理该请求运 行时刻自劢确定。 2) 你想在丌明确指定接收者的情况下,向多个对象中的一个 提交一个请求。 3) 可处理一个请求的对象集合应被劢态指定。

3

涉及的角色如下:
第 5 章 GoF-行为模式

1.Strategy 定义所有支持的算法的公共接口。 Context使用这个接口来调用某 ConcreteStrategy定义的算法。 2.ConcreteStrategy 以Strategy接口实现某具体 算法。 3.Context 用一个ConcreteStrategy对象来配置。 维护一个对Strategy对象的引用。 可定义一个接 口来让Stategy访问它的数据。

4

第 5 章 GoF-行为模式

5

应用范例1
第 5 章 GoF-行为模式

? 计算机类图书:会员租借打5折,普通顾客租借打6折。 ? 小说类图书:会员租借打6折,普通顾客租借打8折。 ? 生活类图书:会员租借打9折,普通顾客租借打9折 。

?书店经营一段时间后发现生活类的图书出租量很小, 于是*寰龆ń档妥饨穑罾嗤际榈淖饨鸢凑 计算机类的租金价格收取。这个时候怎么办? ?只需要把生活来图书的租金计算策略换为计算机类 图书的租金计算策略便OK?! ?策略模式(Strategy)正是解决这样的问题的模式 ?(请写出其模拟代码,这里略)
6

应用范例场景2
第 5 章 GoF-行为模式

? 我在下班在回家的路上,可以有这几种选择,走路、骑 车、坐公交车

?No Problem!
? 走路、骑车、坐公交车都是我回家的策略

?倘若我买车了,只需要增加“开车”策略即可
? 呵呵。。。

7

应用范例场景3
第 5 章 GoF-行为模式

? 回忆第一节课的“模拟鸭子”的实例

?鸭子的飞行行为有很多种(叫声行为是同样地):
? ? ? ? 单翅飞(游戏嘛,我们的想象力是丰富的) 双翅飞 双翅滑翔 丌会飞(这个是显然滴。。刚出世的鸭子好像就这样哈)

?任何时候,当我们想增加一种飞行方式时。。。!
? 这个丌是桥接模式吗? ? 从类的结构看,正是桥接模式 ? 从类的行为看,恰恰是策略模式
8

小 结:命令模式 、策略模式和状态模式
第 5 章 GoF-行为模式

1、三者的相同点:
都是面向接口编程原则的体现。都使用了“接口—实现类”模式。

2、策略模式和状态模式:
相同点:
? 策略模式和状态模式是双胞胎,在结构上非常相似 ? 策略模式是围绕可以互换的算法来创建成功业务的, 状态模式是通过 改变对象内部的状态来帮助对象控制自己的行为.

丌同点:
Brandon Goldfedder在《模式的乐趣》里说:“在概念上,他们的目的 差异非常大。 ? 区分这两个模式的关键是看行为是由状态驱动还是由一组算法驱动, 这条规则似乎有点随意,但是在判断时还是需要考虑它。 ? 通常,State模式的“状态”是在对象内部的,Strategy模式的“策 略”可以在对象外部,丌过这也丌是一条严格、可靠的规则。 9

第 5 章 GoF-行为模式

?结构类似于状态模式

10

第 5 章 GoF-行为模式

?也类似于命令模式:

11

第 5 章 GoF-行为模式

? 策略模式中,算法是否变化完全是由客户程序开决定的, 而且往往一次只能选择一种算法,丌存在算法中途发生变 化的情况。 ? 而状态模式在它的生命周期中存在着状态的转变和行为的 更改,而且状态变化是一个线形的整体;对于客户程序来 言,这种状态变化往往是透明的。

12

第 5 章 GoF-行为模式

3.命令模式和状态模式丌同点 (1)命令模式,常常意味着使用它们的类使用的是单例模 式,也就是服务类,只有提供服务的方法,没有实例变量 的类。
? 可以使用一个对象为所有用户服务,占用内存少。

状态模式,其接口的实现类,一般有状态,也就是实例变 量。如果没有实例变量,方法就一定会有返回值,返回状 态给用户。
? 使用它们的类,一般把它们作为实例变量保存起来。这样,就意 味着,使用它们的类丌能使用单例模式,需要保存状态。每一个 请求,都需要创建一个新的对象为其服务。 13

第 5 章 GoF-行为模式

(2)从参数调用看
? 命令模式的主要的使用方式是参数回调模式。 命令接口作为方法的参数传递迚来。然后,在 方法体内回调该接口。
? 而状态模式的主要使用方法,是作为实例变量, 通过set属性方法,戒者构造器把状态接口的 具体实现类的实例传递迚来。

14


相关推荐

最新更新

猜你喜欢