浏览 9939 次
锁定老帖子 主题:Java设计模式之策略模式(1)
精华帖 (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 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-11-06
好象是委托呀,不是策略。
|
|
返回顶楼 | |