设计23式—策略

来源:互联网 发布:史蒂芬库里 知乎 编辑:程序博客网 时间:2024/05/29 04:55
/* * 策略模式 * 优点 * 算法可以自由切换 * 避免使用多重条件判断 * 扩展性良好 */public class MyMain {public static void main(String[] args) {// 两个参数int a = 8, b = 4;// 加载加法策略System.out.println("8+4=" + new CalculatorA(new Addition()).Action(a, b));// 加载减法策略System.out.println("8-4=" + new CalculatorA(new Subtraction()).Action(a, b));// 加载乘法策略System.out.println("8*4=" + new CalculatorA(new Multiplication()).Action(a, b));// 加载除法策略System.out.println("8/4=" + new CalculatorA(new Division()).Action(a, b));// 策略枚举System.out.print("计算4+3*5+9-2/2=");System.out.println(Calculator.Addition.Operation(4,Calculator.Addition.Operation(Calculator.Multiplication.Operation(3, 5),Calculator.Subtraction.Operation(9, Calculator.Division.Operation(2, 2)))));}}// 普通策略// 定义一个抽象运算策略abstract interface IOperationA {// 抽象的运算法则abstract public int Action(int a, int b);}// 具体的运算环境class CalculatorA {// 运算策略private IOperationA operationA;public CalculatorA(IOperationA operationA) {this.operationA = operationA;}// 使用运算public int Action(int a, int b) {return operationA.Action(a, b);}}// 具体的加法运算策略class Addition implements IOperationA {@Overridepublic int Action(int a, int b) {return a + b;}}// 具体的减法运算策略class Subtraction implements IOperationA {@Overridepublic int Action(int a, int b) {return a - b;}}// 具体的乘法运算策略class Multiplication implements IOperationA {@Overridepublic int Action(int a, int b) {return a * b;}}// 具体的除法运算策略class Division implements IOperationA {@Overridepublic int Action(int a, int b) {return a / b;}}// 扩展// 策略枚举// 定义一个计算的策略枚举enum Calculator {// 加法Addition("+") {@Overridepublic int Operation(int a, int b) {return a + b;}},// 减法Subtraction("-") {@Overridepublic int Operation(int a, int b) {return a - b;}},// 乘法Multiplication("*") {@Overridepublic int Operation(int a, int b) {return a * b;}},// 除法Division("/") {@Overridepublic int Operation(int a, int b) {return a / b;}};String value = "";private Calculator(String value) {this.value = value;}public String getValue() {return value;}abstract public int Operation(int a, int b);}

原创粉丝点击