设计模式笔记之Strategy Pattern

来源:互联网 发布:mac两个显示器 编辑:程序博客网 时间:2024/06/04 18:25

策略模式: 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());
  }
}

原创粉丝点击