设计模式 - 策略模式

策略模式:属于行为型设计模式,是比较简单的设计模式之一,在代码中运用也是比较简单和广泛的。
先来一个定义:定义一系列的算法,把它们一个个封装起来,并且使他们可以互相替换。
大白话翻译:我这里搞了几个方案,你给我你的资料,我可以通过这几个方案给你搞出不同的效果出来。
很多人在学习了工厂模式后再来学习策略模式,这时就一脸懵逼了,这不就是“工厂模式”吗?非也非也,工厂模式是属于创建型设计模式,专注于对象的创建(也就是new这一块),达到代码的解耦,而策略模式属于行为型设计模式,专注于
行为处理上(就像我上面说的不同方案,对于你提供的资料用不同的方案那么实现的行为就不一样),从而实现代码的解耦。

策略模式

下面又到了举例子时间:
例如有一台计算器,可以输入数字,上面还有几个模式按钮分别是模式1,模式2和默认模式。每个模式都是不同的计算逻辑,你只需要输入3个数,选对应的模式就可以得到通过这个模式计算出的答案
上码:

//把计算功能设计为接口
public interface Calculation {
    public void calculate(int num);
}

//模式一   计算逻辑是:额外加100
public class ModeOne implements Calculation{

    @Override
    public void calculate(int num) {
        int result = num+100;
        System.out.println("策略一  拿到值,再加上100   结果:"+result);
    }
}

//模式二   计算逻辑是:额外乘以5
public class ModeTwo implements Calculation{
    @Override
    public void calculate(int num) {

        int result = num*5;
        System.out.println("策略二  拿到值,再乘以5   结果:"+result);
    }
}

//默认模式   计算逻辑是:不做额外运算
public class ModeDefault implements Calculation {
    @Override
    public void calculate(int num) {
        //空策略,空模式
        System.out.println("不做额外运算");
    }
}

//实现计算器
public class Calculator {

    private Calculation calculation = null;

    public Calculator() {
        calculation = new ModeDefault();
    }

    public Calculator(Calculation calculation) {
        this.calculation = calculation;
    }

    public void setCalculation(Calculation calculation) {
        this.calculation = calculation;
    }

    public void getResult(int num1, int num2){
        int sum = num1+num2;
        System.out.println("计算器拿到输入的值后先进行加法计算, 结果:"+sum);
        calculation.calculate(sum);
    }
}

//用户使用计算器输入数字和选择模式得到答案
public class Client {
    public static void main(String[] args) {
        Calculator calculator = new Calculator();
        calculator.getResult(1,2);
        System.out.println("=====================================================");
        calculator.setCalculation(new ModeOne());
        calculator.getResult(1,2);
        System.out.println("=====================================================");
        calculator.setCalculation(new ModeTwo());
        calculator.getResult(1,2);
    }
}

运行结果:
在这里插入图片描述
上面的代码中,模式一,模式二和默认模式,就是我们所说的策略,在输入同样的原始参数进去,通过更换不同策略,我们得到了不同的结果。

扩展

这里写了一个默认的策略,ModeDefault,这样做的好处是避免了在上面调用的时候,需要对策略判空,从而避免了漏写判空而产生bug。

一千个读者就有一千个哈姆雷特,以上纯属于我个人的学习心得,如果有哪里写得不对,请大家指出,让我好学习一波,纠正错误,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值