小牛犊 发表于 2013-1-27 05:14:33

一:strategy模式(策略模式)

策略模式:
策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端
 
策略模式由三部分组成:
a:  抽象策略角色:策略类,通常由一个接口或者抽象类实现
b:  具体策略角色:包装了相关的算法和行为
c:  环境角色:持有一个策略类的引用,最终给客户端调用的。
 
一个简单运用策略模式的例子:
public interface IStrategy {/** * 抽象策略角色   策略类,通常由一个接口或者抽象类实现* @param a * @param b * @return */public String calculate(float a,float b);}   
public class AddStrategy implements IStrategy {/** * 具体策略角色:包装了相关的算法和行为 */@Overridepublic String calculate(float a, float b) {// TODO Auto-generated method stubfloat result=a+b;return "相加结果为:" + result; }}   
public class SubStrategy implements IStrategy {/** * 具体策略角色:包装了相关的算法和行为 */@Overridepublic String calculate(float a, float b) {// TODO Auto-generated method stubfloat 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 
页: [1]
查看完整版本: 一:strategy模式(策略模式)