策略模式

策略模式的意义:

  • 策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系。
  • 弱连接的特性使软件具有更强的可扩展性,易于维护,它大大的提高了软件的可重用性。

策略模式的组成:

  • 抽象策略角色 : 通常由一个接口或者抽象类担当
  • 具体策略角色 : 包装了相关的算法和行为
  • 环境角色 : 持有一个策略类的引用,最终给客户端调用的。

策略模式的实现步骤:

  1. 对策略对象定义一个公共接口。
  2. 编写策略类,该类实现了上面的接口。
  3. 在使用策略对象的类中保存一个对策略对象的引用。
  4. 使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值

策略模式的缺点:

  1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
  2. 造成很多的策略类

步骤一:写抽象策略角色

public interface Strategy {
    public int calculate(int a, int b);
}

步骤二:写具体策略角色

/**
 *  @Description:具体策略角色1
 */
public class AdditionStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a + b;
    }
}
/**
 *  @Description: 具体策略角色2
 */
public class SubStrategy implements Strategy{
    @Override
    public int calculate(int a, int b) {
        return a - b;
    }
}
/** 
 *  @Description: 具体策略角色3
 */
public class MultiplicationStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a * b;
    }
}
/**
 *  @Description: 具体策略角色4
 */
public class DivisionStrategy implements Strategy {
    @Override
    public int calculate(int a, int b) {
        return a / b;
    }
}

步骤三:创建环境角色

/**
 *  @Description: 环境角色
 */
public class Enviroment {
    private Strategy strategy;

    public Enviroment(Strategy strategy) {
        this.strategy = strategy;
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public int calculator(int a, int b) {
        return strategy.calculate(a, b);
    }
}

步骤四:写测试类

/**
 *  @Description:
 */
public class StrategyTestMain {
    public static void main(String[] args) {
        Strategy strategy = new AdditionStrategy();

        Enviroment enviroment = new Enviroment(strategy);

        int result = enviroment.calculator(3, 7);
        System.out.println(result);

        strategy = new SubStrategy();
        enviroment.setStrategy(strategy);
        result = enviroment.calculator(3, 7);
        System.out.println(result);

    }
}
posted @ 2017-10-11 10:17  寻找风口的猪  阅读(308)  评论(0编辑  收藏  举报