2008-03-05
设计模式之策略模式(Strategy)
关键字: 策略模式(strategy) 策略模式的用意是针对一组算法或者说实现,将每一个算法(实现)封装到具有共同接口(抽象类)的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端。
先来看一没有用策略模式的类:
public class Output {
public void OutputMethod(char flag) {
switch (flag) {
case 'A':
System.out.println("Output flag A");
break;
case 'B':
System.out.println("Output flag B");
break;
case 'C':
System.out.println("Output flag C");
break;
default:
break;
}
}
}
客户端调用:
Output output = new Output();
output.OutputMethod('B');策略模式由三部分实现:
A: 抽象策略角色:策略类,通常由一个接口或者抽象类实现
B: 具体策略角色:包装了相关的算法和行为
C: 环境角色:持有一个策略类的引用,最终给客户端调用的。
public interface Ioutput {
void output();
}
public class Aoutput implements Ioutput {
public void output() {
System.out.println("Output flag A");
}
}
public class Boutput implements Ioutput {
public void output() {
System.out.println("Output flag B");
}
}
public class Context {
private Ioutput output ;
Context(Ioutput output){
this.output = output ;
}
public void output(){
output.output();
}
}客户端调用:
Context context = new Context(new Aoutput()); context.output(); Context bcontext = new Context(new Boutput()); bcontext.output();
策略模式优点:
1.可以很方便的动态改变算法或行为
2.避免使用多重条件转移语句
策略模式缺点:
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2.造成很多的策略类。
- 12:03
- 浏览 (337)
- 评论 (1)
- 分类: 设计模式
- 发布在 Groovy on Grails 圈子
- 相关推荐
评论
shiren1118
2008-03-05
不知道有何应用啊?
转到http://grails.5d6d.com/viewthread.php?tid=179&extra=page%3D1&frombbs=1中,可以吗?
转到http://grails.5d6d.com/viewthread.php?tid=179&extra=page%3D1&frombbs=1中,可以吗?
发表评论
- 浏览: 11885 次
- 性别:

- 来自: 长春

- 详细资料
搜索本博客
我的相册
美女
共 1 张
共 1 张
最近加入圈子
最新评论
-
用JS and DOM生成表格
document.getElementsByTagName ("body"). ...
-- by 7thbyte -
用JS and DOM生成表格
只能在firefox浏览器中实现
-- by cherryQQ -
设计模式之策略模式(Strat ...
不知道有何应用啊? 转到http://grails.5d6d.com/view ...
-- by shiren1118 -
DOM和JAVASCRIPT访问页面 ...
IE里getElementsByName()是按ID拿的 - -
-- by risezhang -
另人无奈的SOA
那好呀,如果你能SCA/SDO熟悉的话,有相关资料发给我呀,哈哈,cljspn@ ...
-- by cljspn






评论排行榜