策略模式实现

策略模式

策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。该模式定义了一系列算法,将每个算法封装到一个独立的类中,并使它们可以互相替换。这样,客户端就可以在不修改原始类的情况下选择不同的算法来解决特定的问题。

结构

策略模式通常包含以下几个角色:

  1. 策略接口(Strategy Interface):定义了一个算法族的接口,其中包含了一系列具体的算法。通常是一个接口或者抽象类。

  2. 具体策略(Concrete Strategies):实现了策略接口的具体算法类。每个具体策略类都实现了算法的具体逻辑。

  3. 上下文(Context):维护一个对策略对象的引用,并且可以在运行时切换不同的策略。

示例

让我们以一个排序算法的示例来说明策略模式:

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

// 具体策略类:冒泡排序
class BubbleSort implements SortingStrategy {
    public void sort(int[] array) {
        // 冒泡排序算法的具体实现
    }
}

// 具体策略类:快速排序
class QuickSort implements SortingStrategy {
    public void sort(int[] array) {
        // 快速排序算法的具体实现
    }
}

// 上下文类
class Context {
    private SortingStrategy strategy;

    public Context(SortingStrategy strategy) {
        this.strategy = strategy;
    }

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

    public void executeStrategy(int[] array) {
        strategy.sort(array);
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        int[] array = {3, 1, 4, 1, 5, 9, 2, 6};
        
        Context context = new Context(new BubbleSort());
        context.executeStrategy(array); // 使用冒泡排序

        context.setStrategy(new QuickSort());
        context.executeStrategy(array); // 使用快速排序
    }
}

在这个示例中,我们定义了一个排序策略接口 SortingStrategy,并实现了两种具体的排序算法:冒泡排序和快速排序。然后,我们使用一个上下文类 Context 来维护对策略对象的引用,并且在运行时可以切换不同的策略。最后,我们在客户端代码中创建了一个上下文对象,并且根据需要选择不同的排序策略来对数组进行排序。

策略模式的优点包括:灵活性高、可扩展性强、代码复用性好。它可以让算法独立于客户端而变化,并且方便地进行单元测试。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值