1.策略模式
先说设计原则:
①针对接口编程,而不是面向实现。
③将代码稳定部分和变化部分分离。
实例:针对鸭子的(飞和叫)行为,拿出来作为接口
具体理解:我们针对飞行接口和叫声接口单独做了抽象基类,在抽象基类之下分别继承了不同的飞行类型。然后我们应该定义一个专门用来调用相关接口的类:
例如:
class Stragegy{
private:
FlyBehavior fly1;
QuackBehavior quack1;
public:
Stragegy(FlyBehavior fly1, QuackBehavior quack1){this.fly1 = fly1; this.quack1 = quack1;}
fly1.fly();
quack1.quack();
}
我们使用的原则:其一:针对接口编程在本例中值指的是针对飞行和叫的行为编程,而不是针对鸭子叫和飞来编程。其二:代码稳定的地方是飞行和叫的基类,以及stragegy类,变化的地方是各个子类。
2、适用场景
①系统有很多类,但是他们的区别只是行为不同
②一个系统需要动态的在几个算法中选择一种
③多个类只有在算法或行为上稍有不同的场景
④算法需要自由切换的场景
⑤需要屏蔽算法规则的场景
3.策略模式的优点:
①可以减少ifelse语句
②提高算法的保密性和安全性
③符合开闭原则
4、缺点
①客户端需要知道所有策略类,自己决定使用哪个策略类
②类的数量增加