策略模式: Strategy Pattern
概括: 定义了算法家族(interface),分别分装起来(实现该interface), 算法之间可以互相替换, 把它们内嵌入工作类提供给用户使用, 从而不会影响用户使用的接口,而只需要维护工作类中使用的具体算法。
关键字: Has a
重点: 使用Has-a取代简单的Is-a关系, 通过在抽象基类中增加一个策略类来达到Has-a的关系,这样所有的子类,都可以使用自己设定的策略来完成工作.
类图:
简单例子: 摘录自VTC Design Pattern教程
抽象基类:
public abstract class Vehicle
{
private GoAlgorithm goAlgorithm;
public Vehicle()
{
}
public void setGoAlgorithm (GoAlgorithm algorithm)
{
goAlgorithm = algorithm;
}
public void go() {
goAlgorithm.go();
}
}
----------------------策略接口及类:
public interface GoAlgorithm
{
public void go();
}public class GoByDrivingAlgorithm implements GoAlgorithm
{
public void go()
{
System.out.println("Now I'm driving.");
}
}public class GoByFlyingAlgorithm implements GoAlgorithm
{
public void go() {
System.out.println("Now I'm flying.");
}
}--------------------------------------------------------------------------------------
实际用户子类:
public class Jet extends Vehicle
{
public Jet()
{
setGoAlgorithm(new GoByFlyingFastAlgorithm());
}
}