JAVA中的策略模式

什么是策略模式

一个类的行为或其算法可以在运行时更改,这种类型的设计模式称为策略模式。
在多种算法相似时,经常采用if…elseif…else或者while的方式进行判断,判断较多的情况下,较为复杂且难以维护,这种情况下将算法封装成一个一个的类任意替换使用。

策略模式优缺点

  • 优点

算法可以自由切换
避免使用多重判断
扩展性好

  • 缺点

策略类越来越多
所有策略类都需要对外暴露

  • 注意事项

避免过度使用策略模式,策略类较多时,根据需求使用混合模式,解决策略类较多的问题

策略模式实现

创建一个Strategy 接口并实现了Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。通过Context调用不同的策略。
在这里插入图片描述

示例代码

以旅行为例,旅行的出游方式,选择骑自行车、坐汽车等,每一种旅行方式都是一个策略

// 创建一个旅行的策略
public interface TravelStrategy {
    public void travel();
}
// 自行车策略
public class BikeTravelStrategy implements TravelStrategy{
    @Override
    public void travel() {
        System.out.println("bike travel");
    }
}
// 汽车策略
public class CarTravelStrategy implements TravelStrategy {
    @Override
    public void travel() {
        System.out.println("car travel");
    }
}
// 定义Context类
public class Context {
    private TravelStrategy travelStrategy;

    Context(TravelStrategy strategy){
        this.travelStrategy = strategy;
    }

    public void executeStrategy(){
        travelStrategy.travel();
    }
}
// 使用 Context 来查看当它改变策略 TravelStrategy 时行为的变化。
public class Main {
    public static void main(String[] args) {
        Context c1 = new Context(new BikeTravelStrategy());
        c1.executeStrategy();

        Context c2 = new Context(new CarTravelStrategy());
        c2.executeStrategy();
    }
}
  • 输出结果
bike travel
car travel

策略模式应用场景

可以理解为,使用while 或者 if…elseif…else的情况下均可使用策略模式,根据不同的业务场景合理使用,避免过度使用。

  • 例如

1、样例代码中旅行使用不同的交通工具
2、支付方式
3、折扣、返利等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值