策略模式
策略模式的意义:
- 策略模式使开发人员能够开发出由许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系。
- 弱连接的特性使软件具有更强的可扩展性,易于维护,它大大的提高了软件的可重用性。
策略模式的组成:
- 抽象策略角色 : 通常由一个接口或者抽象类担当
- 具体策略角色 : 包装了相关的算法和行为
- 环境角色 : 持有一个策略类的引用,最终给客户端调用的。
策略模式的实现步骤:
- 对策略对象定义一个公共接口。
- 编写策略类,该类实现了上面的接口。
- 在使用策略对象的类中保存一个对策略对象的引用。
- 使用策略对象的类中,实现对策略对象的set和get方法(注入)或者使用构造方法完成赋值
策略模式的缺点:
- 客户端必须知道所有的策略类,并自行决定使用哪一个策略类
- 造成很多的策略类
步骤一:写抽象策略角色
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); } }