[关闭]
@pastqing 2015-10-21T11:03:24.000000Z 字数 4388 阅读 3158

java设计模式——策略模式

java 设计模式


一、策略模式的定义

策略模式, 顾名思义就是指对象具有某个行为,但是在不同的业务场景下, 这个行为应该有不同的表现形式, 也就是有了不同的策略。让对象能再不同的场景下对同一行为有不同的实现, 这就是策略模式。

下面是策略模式的类图:
Strategy.png-112.1kB

  1. public interface Strategy {
  2. public void algorithmStartegy() ;
  3. }
  1. public class ConcentrateStrategy_1 implements Strategy{
  2. @Override
  3. public void algorithmStartegy() {
  4. System.out.println("I am algorithm strategy 1");
  5. }
  6. }
  7. public class ConcentrateStrategy_2 implements Strategy{
  8. @Override
  9. public void algorithmStartegy() {
  10. System.out.println("I am algorithm strategy 2");
  11. }
  12. }
  1. public class Situation {
  2. Strategy strategy;
  3. public Situation(Strategy strategy) {
  4. this.strategy = strategy;
  5. }
  6. public void handleAlgorithm() {
  7. strategy.algorithmStartegy();
  8. }
  9. }
  1. Situation situation = new Situation(new ConcentrateStrategy_1());
  2. situation.handleAlgorithm();
  3. ...

从策略模式的描述以及类图来看真的是非常简单, 总结起来就是策略模式定义了一组算法,它们有一个共同的策略行为接口 ,并且这些算法之间可以互相替换,使算法可以根据场景的不同而改变。

二、策略模式的实际应用

策略模式的应用有很多, 比如说JDK中FilenameFilter的使用过程, 比如场景java.util.Collections.sort(List<T>list, Comparator<? super T>c)与策略java.util.Comparator的使用等等。下面我以一个实际的业务场景来具体实现以下策略模式:

以上就是此处的策略模式的设计过程,如果需要多种策略的叠加, 也就要相应的使用注解的嵌套了, 这里就不在发挥了。

三、策略模式中的设计原则

学习策略模式, 不要记住代码是怎么实现的,更重要的是记住其设计原则。根据原则写代码, 而不是生搬硬套。其实设计模式都是设计原则的体现, 如果理解了设计原则, 那么你写的代码也可以变成一种模式。

参考文献
策略模式设计原则

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注