12.3 策略模式

    上述封装了具体的回家方式的办法,实际上是使用了策略模式,GoF给出的定义是如下。

    Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

    定义一组算法,对每一种进行封装,使它们可以相互交换。此模式可以使算法独立于使用它的客户程序而变化。

    在本章的例子中Travellable接口是策略接口,我们的三个实现类,ByAir类、ByCoach类和ByTrain类都实现了各自不同的具体回家方式;PassengerByAirAndCoach类和PassengerByAir等类都包含了不同的回家算法,它们在此模式里被称为Context,维护指向具体策略类的对象引用。

    细心的读者可能会回想起第7章所讲的那段测试代码。我们在测试代码中使用了策略模式,枚举类型(enum)DecoratorTest提供了抽象的算法接口,枚举值HBTEST和JPATEST是具体算法的实现,关于枚举类型的介绍,请参见13.5 使用enum类型一节。DecoratorTestDrive是相应的Context类,在运行时可以选择Hibernate环境和Jpa环境分别进行测试。