【设计模式】策略模式定义及其实现代码示例

完整案例代码:java-demos/design-pattern-demos/strategy-pattern at main · idealzouhu/java-demos

一、策略模式

1.1 策略模式的定义

策略模式(Strategy Pattern)定义如下:

Define a family of algorithms,encapsulate each one,and make them interchangeable.(定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。)

1.2 策略模式的参与者

策略模式的参与者主要有:

  • Context(上下文类):它持有一个 Strategy 对象,用于调用具体策略的方法。客户端通常只需要与 Context 交互,而不直接接触具体的策略实现
  • Strategy(策略接口):定义了算法的通用接口,所有具体策略都实现这个接口。
  • ConcreteStrategy(具体策略类):实现 Strategy 接口的具体算法类,不同的策略类提供不同的算法实现。

1.3 策略模式的优点

  • 避免使用多重条件判断:策略模式可以取代if-elseswitch-case的条件分支。

1.4 策略模式的缺点

  • 策略数量可能会增多:如果策略太多,会增加类的数量,维护成本上升。如果 if-else 判断分支不多并且是固定的,那就使用策略模式即可。

1.5 策略模式的使用场景

  • 算法/行为自由切换: 比如支付系统中,可以通过策略模式动态选择不同的支付方式(微信支付、支付宝支付、信用卡支付等)。
  • 屏蔽算法底层细节:只用知道算法名字即可

二、策略模式简单实现

2.1 案例描述

假设我们有一个系统,它可以根据不同的需求选择不同的排序算法,比如快速排序、冒泡排序、归并排序等。通过策略模式,我们可以将这些不同的算法作为策略类进行实现。

2.2 实现代码

// 策略接口
interface SortStrategy {
   
   
    void sort(int[] array);
}

// 具体策略类:快速排序
class QuickSortStrategy implements SortStrategy {
   
   
    @Override
    public void sort(int[] array) {
   
   
        // 快速排序算法实现
        System.out.println("Using Quick Sort");
        // 排序逻辑
    }
}

// 具体策略类:冒泡排序
class BubbleSortStrategy implements SortStrategy {
   
   
    @Ove
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值