首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

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

2012-10-28 
Java设计模式之策略模式(1)策略模式的目的是定义一系列算法,把它们封装起来,并且使它们可以相互替换.本模

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   好象是委托呀,不是策略。

热点排行