2008-08-07
一:strategy模式(策略模式)
关键字: 策略模式 strategy策略模式:
策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端
策略模式由三部分组成:
a: 抽象策略角色:策略类,通常由一个接口或者抽象类实现
b: 具体策略角色:包装了相关的算法和行为
c: 环境角色:持有一个策略类的引用,最终给客户端调用的。
一个简单运用策略模式的例子:
public interface IStrategy {
/**
* 抽象策略角色 策略类,通常由一个接口或者抽象类实现
* @param a
* @param b
* @return
*/
public String calculate(float a,float b);
}
public class AddStrategy implements IStrategy {
/**
* 具体策略角色:包装了相关的算法和行为
*/
@Override
public String calculate(float a, float b) {
// TODO Auto-generated method stub
float result=a+b;
return "相加结果为:" + result;
}
}
public class SubStrategy implements IStrategy {
/**
* 具体策略角色:包装了相关的算法和行为
*/
@Override
public String calculate(float a, float b) {
// TODO Auto-generated method stub
float result=a-b;
return "相减结果为:" + result;
}
}
public class ContextRole {
/**
* 环境角色,持有一个策略类的引用,最终给客户端调用的
*/
private IStrategy iStrategy;
public ContextRole(IStrategy iStrategy){
this.iStrategy=iStrategy;
}
public String calculate(float a,float b) {
return this.iStrategy.calculate(a, b);
}
}
public class Test {
/**
* Client
* @param args
*/
public static void main(String[] args) {
IStrategy iStrategy=new AddStrategy();
ContextRole contextRole=new ContextRole(iStrategy);
String result=contextRole.calculate(300, 200);
System.out.println(result);
iStrategy=new SubStrategy();
contextRole=new ContextRole(iStrategy);
result=contextRole.calculate(300, 200);
System.out.println(result);
}
}
相加结果为:500.0 相减结果为:100.0
发表评论
- 浏览: 621 次
- 性别:

- 来自: 成都

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
Hibernate一对一关联映射
呵呵,我还没有用hibernate做过项目,刚学习。 的确客户受卡的约束。
-- by 小牛犊 -
基本类型(内置类型)学习 ...
谢谢哈, 引用short s=s1+s2;编译错哈! 这句是错误的啊,因为s1, ...
-- by 小牛犊 -
五:传值还是传引用学习笔 ...
谢谢,画内存图整个过程的变化就一清二楚了。
-- by 小牛犊 -
五:传值还是传引用学习笔 ...
画内存图 我当老师时间 天天给学生画图 图是很好的
-- by rrsy23 -
基本类型(内置类型)学习 ...
加油哈: short s1=1; short s2=1; short s=s1+ ...
-- by rrsy23






评论排行榜