Java二十三种设计模式之策略

首先, 策略模式是对算法的一种包装.

其次,策略模式包含3个部分:
 * 1.接口/抽象类: 声明算法(策略)
 * 2.实现类: 实现上面的接口.提供不同的具体的策略
 * 3.环境: Context  里面固定有三个内容:
 *      1. 接口声明作为成员变量,表明当前上下文拥有策略
 *      2. 通过set方法来决定到底要使用哪一个策略

 *      3. 调用策略中的方法.获取结果.

下面, 通过一个实例来对策略模式进行说明:

       实例: 使用策略模式加Lambda匿名函数来实现简单的计算器功能:

    首先,我们对加,减,乘,除算法进行包装:

public interface Calc {
    /**
     * 计算行为
     * @param num1  数值1
     * @param num2  数值2
     * @return       结果
     */
    double operator(double num1,double num2);
    /**
     * 4个内部类来实现不同的策略.
     */
    class Add implements Calc{

        @Override
        public double operator(double num1, double num2) {
            return num1 + num2;
        }
    }
    class Sub implements Calc{

        @Override
        public double operator(double num1, double num2) {
            return num1 - num2;
        }
    }

    class Mul implements Calc{

        @Override
        public double operator(double num1, double num2) {
            return num1 * num2;
        }
    }

    class Div implements Calc{
        @Override
        public double operator(double num1, double num2) {
            return num1 / num2;
        }
    }
}

接下来写测试类:

public class Test {

    /**
     * 声明这里要使用策略
     */
    Calc mCalc;

    /**
     * 定制要采用哪一种策略.
     * @param calc
     */
    public void setCalc(Calc calc) {
        this.mCalc = calc;
    }

    /**
     * 通过策略所封装好的算法来求的结果.
     * @return
     */
    public double calcResult(){
        return mCalc.operator(1,2);
    };

    public static void main(String [] args){
        //-- 静态访问非静态需要通过对象来访问
        Test t = new Test();
        //-- 设置策略
        // 内部类编译后生成的class文件是外部类$内部类.
        // 如果是匿名内部类的话class文件是外部类$1.class
        t.setCalc(new Calc.Div());
        //-- 计算结果
        System.out.println(t.calcResult());


    }
}


猜你喜欢

转载自blog.csdn.net/chenkun_321/article/details/80054725
今日推荐