策略模式-个人记录

前言

策略模式是一种行为设计模式,它允许你定义一系列算法,将每个算法封装起来,并使它们可以互相替换。以下是使用策略模式的一些优点和适用场景:

优点:

  1. 灵活性和可维护性: 策略模式使得算法的变化独立于使用算法的客户端。新增、删除或修改算法不会影响到客户端的代码,从而提高了系统的灵活性和可维护性。

  2. 可复用性: 策略模式将每个算法封装成独立的类,这使得这些算法可以在不同的场景中被复用。客户端可以选择使用不同的策略,而无需修改现有代码。

  3. 易于扩展: 可以通过添加新的策略类来扩展系统的行为,而不需要修改已有的代码。这符合开闭原则。

  4. 减少条件语句: 策略模式可以减少大量的条件语句。相比于使用多个 if-else 语句,通过策略模式可以使得代码更加清晰、简洁。

适用场景:

  1. 有多个相关的类,只是行为有差异: 当有多个类具有相似的行为,但其实现不同的算法时,策略模式可以将这些算法封装到独立的策略类中,使得代码更加模块化。

  2. 需要在运行时动态选择算法: 当需要在运行时根据某些条件来选择不同的算法时,策略模式可以让你在运行时切换策略,而无需修改代码。

  3. 类中包含大量的条件语句: 当一个类中包含大量的条件语句,而且这些条件语句根据不同的条件执行不同的操作时,可以考虑使用策略模式来替代条件语句,使得代码更加清晰、易于维护。

总体来说,策略模式是一种有助于降低耦合度、提高代码灵活性和可维护性的设计模式,特别适用于需要在运行时动态选择算法的情景。

实列代码

1.定义策略接口

public interface xxxStrategyService {
    void execute(Integer businessId);
}

2.定义策略实现类

public class xxxAServiceImpl implements xxxStrategyService {
    @Override
    public void execute(Integer businessId) {
        System.out.println("这是xxx==A==的实现............"+businessId);
    }
}

public class xxxBServiceImpl implements xxxStrategyService {
    @Override
    public void execute(Integer businessId) {
        System.out.println("这是xxx==B==的实现............" + businessId);
    }
}

3.调用策略的类

public class xxxStrategyContext {

    private xxxStrategyService strategy;

    public void setStrategy(xxxStrategyService strategy) {
        this.strategy = strategy;
    }

    public void executeOperation(Integer businessId) {
        strategy.execute(businessId);
    }
}

4.选择策略的类

根据传参businessType决定使用哪一个策略

businessId作为业务处理的id(可以不加)

public class xxxSelectStrategy {
    public static void selectStrategy(Integer businessType,Integer businessId){

        xxxStrategyContext context = new xxxStrategyContext();

        switch (businessType) {
            case 1:
                context.setStrategy(new xxxAServiceImpl());
                break;
            case 2:
                context.setStrategy(new xxxBServiceImpl());
                break;
            default:
                throw new IllegalArgumentException("Unsupported businessType: " + businessType);
        }
        context.executeOperation(businessId);
    }
}

5.实际业务中使用策略

    public static void main(String[] args) {
        DocusignSelectStrategy.selectStrategy(1,111);
        DocusignSelectStrategy.selectStrategy(2,222);
    }

输出结果:

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值