ivaneye.com

语言与模式-19策略模式

意图

定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

适用性

Java实现

public class Context {
    //持有一个具体策略的对象
    private Strategy strategy;
    /**
     * 构造函数,传入一个具体策略对象
     * @param strategy    具体策略对象
     */
    public Context(Strategy strategy){
        this.strategy = strategy;
    }
    /**
     * 策略方法
     */
    public void contextInterface(){
        strategy.strategyInterface();
    }
}
public interface Strategy {
    /**
     * 策略方法
     */
    public void strategyInterface();
}
public class ConcreteStrategyA implements Strategy {
    @Override
    public void strategyInterface() {
        //相关的业务
    }
}
public class ConcreteStrategyB implements Strategy {
    @Override
    public void strategyInterface() {
        //相关的业务
    }
}
public class ConcreteStrategyC implements Strategy {
    @Override
    public void strategyInterface() {
        //相关的业务
    }
}

Clojure实现

高阶函数轻松搞定!

(defn context [f]
   (f))
(defn strategy1 []
  (println "Strategy1"))
(defn strategy2 []
  (println "Strategy2"))
(context strategy1)
(context strategy2)