使用工厂设计模式+策略模式+模板设计模式对大量if-else语句进行改造

1.情景介绍

    /*
    *
    *
    * 具体改造过多的if-else
    *
    *   if(张三){
    *       //张三业务
    *       System.out.println("张三业务执行");
    *       //
    *   }else if(李四业务){
    *       //李四业务
    *       System.out.println("李四业务执行");
    *       //
    *   }else if(王五){
    *       //王五业务
    *       return "王五业务执行";
    *       //
    *   }else if(...){
    *       //...
    *   }
    *   ...
    *
    *   使用到的设计模式如下:
    *       1.工厂模式
    *       2.策略设计模式
    *       3.模板方法模式
    *   
    *   情景分析:
    *       进行抽取策略时,张三李四业务方法无返回值,而王五业务方法有返回值
    *
    * */

2.解决思想

1.使用策略模式进行将if-else中业务方法进行抽取,使用不同的Handler进行解决

2.使用工厂设计模式进行管理Handler的注册与获取

3.使用模板方法设计模式进行解决不同业务方法的实现问题

3.实现步骤

3.1定义Handler(策略模式+模板方法设计模式)

public abstract class AbstractHandler implements InitializingBean {


    //子类业务是AAA还是BBB就实现哪种方法,没实现的当调用时会抛出不支持该实现异常

    public void AAA(String name){
        throw new UnsupportedOperationException();
    }

    public String BBB(String name){
        throw new UnsupportedOperationException();
    }

}

3.2使用Factory进行管理Handler(工厂设计模式)

public class Factory2 {
    //Handler容器
    private static Map<String,AbstractHandler> strategyMap = new HashMap<>();
    
    //获取
    public static AbstractHandler getInvokeHandler(String name){
        return strategyMap.get(name);
    }
    
    //注册
    public static void register(String name,AbstractHandler abstractHandler){
        if (StringUtils.isEmpty(name) || null == abstractHandler){
            return;
        }
        strategyMap.put(name,abstractHandler);
    }

}

3.3实现每个子类Handler

张三

@Component
public class ZhangsanHandler2 extends AbstractHandler{

    @Override
    public void AAA(String name) {
        System.out.println("张三业务执行");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Factory2.register("张三",this);
    }
}

李四

@Component
public class LisiHandler2 extends AbstractHandler{

    @Override
    public void AAA(String name) {
        System.out.println("李四业务执行了");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Factory2.register("李四",this);
    }
}

王五

@Component
public class WangwuHandler extends AbstractHandler{

    @Override
    public String BBB(String name) {
        return "王五业务执行了";
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        Factory2.register("王五",this);
    }
}

4.1测试

    /**
     * 工厂 + 策略 + 模板设计模式
     */
    @Test
    public void test(){
        String name  = "王五";
        AbstractHandler invokeHandler = Factory2.getInvokeHandler(name);
        System.out.println(invokeHandler.BBB(name));

        String name2 = "李四";
        Handler invokeHandler2 = Factory.getInvokeHandler(name2);
        invokeHandler2.AAA(name2);

    }

结果

5.优点

使用该方式进行重构对我们的部分强耦合业务进行了有效的解构,方便后期维护,如果后期有不同的模式,只需实现Handler即可

6.其他场景

当我们在设计不同支付方式业务时即可使用该方法(支付宝,微信,第三方,现金....等)

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Java中,可以使用一些设计模式来减少或消除if-else语句使用。以下是一些常用的设计模式示例: 1. 策略模式(Strategy Pattern):该模式允许根据不同的策略执行不同的操作,而不需要使用大量的if-else语句。你可以创建一个接口或抽象类来定义策略,然后针对每个具体的策略实现相应的类。 2. 工厂模式(Factory Pattern):该模式可以用来创建对象,而不需要在客户端代码中使用if-else语句来决定实例化哪个具体类。你可以创建一个工厂类,该类负责根据特定条件返回相应的对象实例。 3. 观察者模式(Observer Pattern):该模式允许一个对象(主题)维护一系列依赖于它的对象(观察者),并自动通知它们任何状态的变化。通过使用观察者模式,你可以避免使用大量的if-else语句来处理不同的观察者逻辑。 4. 模板方法模式(Template Method Pattern):该模式定义了一个算法的骨架,将某些步骤延迟到子类中实现。通过使用模板方法模式,你可以避免在父类中使用if-else来判断具体的实现。 5. 状态模式(State Pattern):该模式允许对象在内部状态发生改变时改变它的行为。通过使用状态模式,你可以避免在一个对象中使用复杂的if-else语句来根据不同的状态执行不同的操作。 这些设计模式提供了一种更优雅和可维护的方式来处理复杂的逻辑,减少了if-else语句使用。在实际开发中,根据具体的需求选择适合的设计模式可以更好地组织代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值