策略模式在工作中的应用

  • 策略模式

  • 引言

       最近在日常工作过程中接到一个任务:需要提供一个接口,根据不同的意图返回给客服端不同的答案,每个意图去识别答案的算法都有各自不同的逻辑。作为一个合格的crud程序员,接到这个需求脑袋里的第一反应就是用if-else去实现,但是这样写代码太丑陋了,每个else里面都会有大量的业务逻辑,对于后期接坑的人肯定会很头痛,这个时候突然想到同事阿伟给我说过的策略模式,之后让代码看起来更优雅,扩展维护起来也更简单明确。

  • 定义
  1. 概述

           该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

  2. 模式中的角色

           策略类(Stratege):定义所有支持的算法的公共接口或者抽象类。


           具体策略类(Concrete Stratege):封装了具体的算法或行为,继承于Stratege类。


           上下文类(Context):用一个ConcreteStratege来配置,维护一个对Stratege对象的引用。
  • 上代码
public class strategyTest {
    public static void main(String[] args) {
        Context context = new Context();
        Strategy strategyA = new StrategyA();
        context.setStrategy(strategyA);
        context.stragyMethod();
        System.out.println("===============");
        Strategy strategyB = new StrategyB();
        context.setStrategy(strategyB);
        context.stragyMethod();
    }
}

//策略类
interface Strategy{
    public void staregyMethod();
}

//具体实现类意图A,返回结果A
class StrategyA implements Strategy{
    @Override
    public void staregyMethod() {
        System.out.println("用户的意图A,返回的结果A");
    }
}

//具体实现类意图B,返回结果B
class StrategyB implements Strategy{
    @Override
    public void staregyMethod() {
        System.out.println("用户的意图B,返回的结果B");
    }
}

//环境类
class Context{
    private Strategy strategy;
    public Strategy getStrategy() {
        return strategy;
    }
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public void stragyMethod(){
        strategy.staregyMethod();
    }
}

上述代码,是当用户意图为A时,计算A结果的逻辑就维护在StrategyA,如果以后产品又有了意图C我们只要在新建一个StrategyC实现Strategy接口,然后在StrategyC里面写C的算法逻辑就好,这样就做到了解耦效果,扩展维护简单明了。

  • 总结
  1. 使用场景

           实现某个功能需要不同的算法要求事
  2. 优点

           2.1、策略模式是一种定义一系列算法的方法,从概念上来看,所有算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合,起到解耦效果。


           2.2、策略模式把不同的算法维护在自己各种的类中,便于维护和扩展,也消除了代码中大量的if-else。
  3. 缺点

           会有很多的策略类。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值