论坛首页 Java企业应用论坛

Java设计模式之策略模式(1)

浏览 9929 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-10  
策略模式的目的是定义一系列算法,把它们封装起来,并且使它们可以相互替换.
本模式使得算法可以独立于它的客户而变话.

以下是关于策略模式的一个小例子:



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

   发表时间:2007-11-06  
好象是委托呀,不是策略。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics