`
iorit2003
  • 浏览: 143084 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

策略模式(转)

阅读更多
一.策略模式是对象的行为模式,用意是对一组算法的封装。动态的选择需要的算法并使用
UML示意图

二.组成部分:
1. 环境角色:持有一个策略类引用
2. 抽象策略
3. 具体策略:相关的算法或操作
三.代码例子
1. 抽象策略
package com.eekq.strategy;

public interface IStrategy {

    /**策略方法*/
    public abstract double add();
}
2. 具体策略,这里我以两个具体策略为例
package com.eekq.strategy;

public class ConcreteStrategy1 implements IStrategy {

    /**示意性算法*/
    public double add() {
        // TODO 自动生成方法存根
        System.out.println(this.getClass().getName() + "的加法运算");
        return 0;
    }

}
package com.eekq.strategy;

public class ConcreteStrategy2 implements IStrategy {

    public double add() {
        // TODO 自动生成方法存根
        System.out.println(this.getClass().getName() + "的加法运算");
        return 0;
    }

}
3.环境角色
package com.eekq.strategy;

public class Context {
    /**环境角色类*/
    private IStrategy strategy;

    public Context(IStrategy strategy) {
        this.strategy = strategy;
    }

    /**策略方法*/
    public double add() {
        this.strategy.add();
        return 0;
    }
}
4.客户端调用
package com.eekq.strategy;

public class Main {

    /**
     *@paramargs
     */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        Context context = new Context(new ConcreteStrategy1());
        context.add();//执行算法1
        context = new Context(new ConcreteStrategy2());
        context.add();//执行算法2
    }

}
5.执行结果:
com.eekq.strategy.ConcreteStrategy1的加法运算
com.eekq.strategy.ConcreteStrategy2的加法运算
6.总结
优点:动态改变算法或行为
缺点:客户端必须知道所有的策略类,并自行决定使用哪一个策略类,必须对每一个算法了解
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics