策略模式(Strategy Pattern)


是什么?算法

怎么用?spa

在什么状况下用?设计

例子!对象


 

 

策略模式:blog

  对象有某个行为,但在不一样的场景下,改行为有不一样的实现算法。继承

  好比:接口

    每一个人都要交「我的所得税」,但「在美国交的我的所得税」和「在中国交的我的所得税」有不一样的算法。游戏

  再好比:it

    鸭子(全部的鸭子)有翅膀,但木头作的鸭子不会飞,活的鸭子会飞,机械鸭子用动力飞。io

 

使用场景:

  一、一个系统有不少类,但这些类的区别仅是它们的行为不一样。

  二、一个系统须要在几个算法中动态的选择一种。那么这些算法能够包装到一个个具体的算法类中,而这一个个具体的算法类都是一个抽象算法类的子类。

 

原理:

  一、定义一族算法(业务规则,如:鸟的飞行方式、我的所得税的缴税方式)

  二、封装每一个算法。

  三、这些算法之间能够相互替换。

例子:

好比:

  设计一个鸭子游戏,游戏中会出现各类鸭子,鸭子类型有木头鸭(不会飞,不会叫)、模型鸭(不会叫,动力飞)、绿头鸭(会飞、会叫)。

  Duck 类至关于Context,是鸭子的基类,全部的鸭子都继承这个类。

  RubberDuck、ModeDuck 橡皮鸭和模型鸭,是具体的鸭子类。

  FlyBehavior 是飞行的行为,是个接口,全部的飞行行为都继承这个接口。全部的飞行行为组成了一组算法。

  FlyWithWings、FlyWithRocket 是具体的飞行类,每一个类中实现了一种飞行方式,全部的具体类实现了接口的fly()方法。

  QuackBehavior 是鸣叫的行为,是个接口,同飞行类同样。全部的鸣叫方式都实现这个接口。

  Quack、Squeak 是具体的鸣叫方式。

相关文章
相关标签/搜索