设计模式(12)-策略模式

定义
将具体的策略实现放入策略容器中,实现策略的灵活调用和替换.

1.策略接口

public interface IStrategy {
    //对a和b进行运算,返回结果
    public int calculate(int a,int b);
}

2.策略实现

public class AddStrategy implements IStrategy{
    @Override
    //加法运算
    public int calculate(int a, int b) {
        return a+b;
    }
}
public class SubStrategy implements IStrategy{
    @Override
    //减法运算
    public int calculate(int a, int b) {
        return a-b;
    }
}

3.策略容器类

public class Context {
    private IStrategy strategy;

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

    //原样实现strategy的方法
    public int calculate(int a,int b){
        return strategy.calculate(a, b);
    }
}

4.运行

public class Client {
    public static void main(String[] args) {
        Context addContext = new Context(new AddStrategy());
        Context subContext = new Context(new SubStrategy());

        System.out.println("2+3= "+addContext.calculate(2, 3));
        System.out.println("2-3= "+subContext.calculate(2, 3));
    }
}

输出:

2+3= 5
2-3= -1

5.枚举策略
将具体的策略实现定义在枚举中,书写更为简洁.

public enum Calculator {
    //枚举对象必须写在最前面
    ADD("+") {
        @Override
        public int calculate(int a, int b) {
            return a+b;
        }
    },

    SUB("-") {
        @Override
        public int calculate(int a, int b) {
            return a-b;
        }
    };

    //构造函数,value属性在构造时传入.
    private Calculator(String value){
        this.value = value;
    }

    private String value;

    //返回枚举的value属性值
    public String getValue(){
        return this.value;
    }

    //抽象方法,枚举对象必须实现
    public abstract int calculate(int a, int b);
}

运行:

public class Client {
    public static void main(String[] args) {
        System.out.println("2+3= "+Calculator.ADD.calculate(2, 3));
        System.out.println("2-3= "+Calculator.SUB.calculate(2, 3));
    }
}

猜你喜欢

转载自blog.csdn.net/chixiaoen/article/details/79401951