Java设计模式之策略模式(1)
策略模式的目的是定义一系列算法,把它们封装起来,并且使它们可以相互替换.
本模式使得算法可以独立于它的客户而变话.
以下是关于策略模式的一个小例子:
package pattern.strategy;
/*
?* 通常持有一个Strategy对象请求,也可以持有一个Strategy对象引用的聚集.
?* 定义一系列客户接口的方法,将客户请求委托给Strategy的算法实现
?*/
public class Context {
??? private Strategy strategy;
??? public Context(Strategy strategy) {
??? ??? this.strategy = strategy;
??? }
??? public void contextRequest() {
??? ??? // 委托具体策略的算法实现
??? ??? strategy.doAlgorithm();
??? }
??? public void contextCallBackRequest() {
??? ??? // Context 可以将自身作为一个参数传递给Strategy方法
??? ??? strategy.doAlgorithm(this);
??? }
}
package pattern.strategy;
/*
?*定义算法持有的公共接口.
?*Context使用这个接口来调用某ConcreteStrategy定义的算法
?*/
public interface Strategy {
??? void doAlgorithm();
??? // Context 可以将自身作为一个参数传递给Strategy方法
??? void doAlgorithm(Context context);
}
package pattern.strategy;
/*
?* 实现Strategy接口的具体算法
?*/
public class ConcreteStrategy implements Strategy {
??? public void doAlgorithm() {
??? ??? System.out.println("doAlgorithm()");
??? }
??? public void doAlgorithm(Context context) {
??? ??? System.out.println("callback doAlgorithm");
??? }
}
package pattern.strategy;
public class StrategyTest {
??? /**
??? ?* @param args
??? ?*/
??? public static void main(String[] args) {
??? ??? Strategy strategy = new ConcreteStrategy();
??? ??? Context context = new Context(strategy);
??? ??? context.contextRequest();
??? ???
??? }
}
我们看一下代码所示Strategy的协作方式 ,Context将客户请求转发给Strategy.
客户通常创建并传递一个ConcreteStrategy 对象给Context.这样,客户仅与Context
打交道,而Strategy和Context 相互作用,以实现选定的算法.当算法被调用时,Context可以将该算法需要的数据都传递给Strategy.或者,Context 也可以将自身作为一个参数传递给Strategy.这样,Strategy在需要时可以回调Context
1 楼 cljspn 2007-11-06 好象是委托呀,不是策略。