策略模式

本文介绍策略模式的概念及其应用场景,通过实例展示如何利用策略模式解决同一类型问题的不同处理方式,提高代码的可读性和可扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式 的简单理解

定义 策略模式定义了一系列算法并将每个算法封装起来,而且使它们还可以相互替换。策略模式
    让算法独立于使用它的客户而独立变化。

策略模式的使用场景:
(1)针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。
(2)需要安全地封装多种同一类型的操作时。
(3)出现同一抽象类有多个子类,而又需要使用if-else 或者 使用switch来选择具体子类时。

策略模式的简单实现。

通常如果一个问题有多个解决方案时,最简单的就是if-else 或者 switch但是这方案问题太多,耦合性太高,
代码臃肿难以维护等等。但是如果解决方案中包括大量的处理逻辑需要封装,或者需要处理方式变动较大的时候就显得
混乱、复杂,当需要修增加一种方案时就要修改类中的代码,这显然不符合开闭原则。面对这种情况呢策略模式就能很好的
解决问题,他将各种方案分离开来,让程序客户端根据具体需要来动态地选择不同的策略方案。下面看一个例子 
北京公交系统的计费功能:

//计算接口
public interface CalculateStrategy {

    /**
     * 按距离计算价格
     * @param km
     * @return
     */
    int calculatePrice(int km);
}

对于每一种出行方式我们都有一个独立的计算策略类,这些类都实现了CalculateStrategy接口

//公交车计算策略(分段计费)
public class BusStrategy implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        int extraTotal = km - 10;
        int extraDactor = extraTotal / 5;
        int factor = extraDactor % 5;
        int price = 1 + extraDactor * 1;
        return factor > 0? ++ price : price;
    }
}

//地铁计算策略
public class SubwayStrategy implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        if(km <= 6){
            return 3;
        }else if(km > 6 && km <= 12){
            return 4;
        }else if(km > 12 && km <= 22){
            return 5;
        }else if(km > 22 && km <= 32){
            return 6;
        }
        return 7;
    }   
}

//客户端调用

public class CliteCulculate {

    CalculateStrategy calculateStrategy;

    public static void main(String[] args){
        CliteCulculate cliteCulculate = new CliteCulculate();
        cliteCulculate.setCalculateStrategy(new SubwayStrategy());
        System.out.println(cliteCulculate.calculate(654));
    }

    public void setCalculateStrategy(CalculateStrategy calculateStrategy) {
        this.calculateStrategy = calculateStrategy;
    }

    public int calculate(int km){
        return calculateStrategy.calculatePrice(km);
    }

}

通过建立抽象将不同的策略构建成一个具体的策略实现,通过不同的策略实现算法替换。在简化逻辑结构的同时,增强了
系统的可读性、稳定性、可扩展性,这对于较为复杂的业务逻辑显得更为直观 扩展也更方便。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值