设计模式之策略模式
策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式体现了三个设计原则:
Ø 原则一、变化与不变化分离原则,将应用中可能出现的变化部分封装起来,和不变的部分进行分离,使不变的部分不受影响,代码变化导致的不可控因素变少,系统更具有弹性;
Ø 原则二、针对接口编程,而不是对实现编程,接口代表是每个行为,提供专门类来实现这些行为。
Ø 原则三、多用组合,少用继承。使用组合不仅可以将算法族封装成类,也可以“在运行时动态改变行为”
策略模式的模型如下:
这样实现的有点:
一、接口的变换不影响对象;某些对象不具有的接口,可以不实现该对象的接口。
二、接口与实现解耦,接口可以重用;.
三、可以通过“设定方法”动态地改变对象的行为;
引用书中的例子,一个动作冒险游戏,里面有4中角色:King,Queen,Knight和Troll,他们可以使用不同的武器进行战斗,武器包括:匕首,弓箭,斧头和宝剑,我们可以这样做:
首先,提取出可变的部分使用武器战斗的接口作为一个方法族,并且分别实现匕首、弓箭、斧头和宝剑的战斗方法。
ClassWeaponBehavior
{
Virtual void UseWeapon()=0;
Virtu