策略模式经典案例【排序算法】

策略模式经典案例【排序算法】

策略模式

策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法都封装起来,并且使它们可以相互替换。策略模式可以让算法的变化独立于使用它们的客户端,从而提高了系统的灵活性和可维护性。

策略模式的结构包含三个主要部分:策略接口、具体策略类和上下文对象。

  • 策略接口定义了所有具体策略类所需要实现的方法
  • 具体策略类实现了策略接口,提供不同的算法实现
  • 上下文对象持有一个策略对象的引用,可以根据需要选择不同的具体策略类来执行相应的算法

在实际开发中,策略模式可以帮助我们解决许多实际问题,例如排序算法、图像处理、文件压缩等。它的优点在于可以提高代码的可维护性和可扩展性,同时也可以减少代码的重复,降低系统的耦合度。

使用场景 多个if-else

多个if else 判断可以通过使用策略模式进行改造。
策略模式的核心思想是将不同的算法封装成不同的类,然后通过上下文对象来选择不同的算法。
在多个if else 判断的情况下,可以将每个if else 分支对应的代码封装成不同的策略类,然后在上下文对象中根据条件选择相应的策略类来执行相应的操作,从而避免了代码中出现过多的if else 判断语句,增强了代码的可维护性和可扩展性。

具体实现方式如下:

  1. 创建策略接口,定义策略方法。
  2. 创建具体策略类,实现策略接口,每个具体策略类对应一个if else分支。
  3. 创建上下文对象,用于管理策略对象,根据条件选择相应的策略对象。
  4. 在客户端中,根据条件判断选择相应的策略对象,并调用策略方法。

排序算法样例

一个经典的策略模式的例子是实现一个排序算法
假设我们需要实现一个排序方法,可以按照不同的方式进行排序,如按照升序或者降序等。传统的实现方式可能会使用if else语句,但是这样的实现方式会使得代码变的复杂难以维护。因此,我们可以使用策略模式来改进这个问题。

首先,我们需要定义一个策略接口,该接口定义了排序算法的方法sort:

public interface SortStrategy {
    
    
    public void sort(int[] data);
}

然后,我们可以创建具体的排序策略类,如升序排序和降序排序,分别实现了sort方法:

public class AscendingSort implements SortStrategy {
    
    
    public void sort(int[] data) {
    
    
        Arrays.sort(data);
    }
}
public class DescendingSort implements SortStrategy {
    
    
    public void sort(int[] data) {
    
    
        Arrays.sort(data);
        int[] reversed = new int[data.length];
        for (int i = 0; i < data.length; i++) {
    
    
            reversed[i] = data[data.length - 1 - i];
        }
        System.arraycopy(reversed, 0, data, 0, data.length);
    }
}

接下来,我们可以创建一个上下文类,用于管理排序策略对象:

public class SortContext {
    
    
    private SortStrategy strategy;
    public SortContext(SortStrategy strategy) {
    
    
        this.strategy = strategy;
    }
    public void setStrategy(SortStrategy strategy) {
    
    
        this.strategy = strategy;
    }
    public void sort(int[] data) {
    
    
        strategy.sort(data);
    }
}

最后,我们可以在客户端中使用上下文对象来选择相应的排序策略:

public class SortClient {
    
    
    public static void main(String[] args) {
    
    
        int[] data = {
    
    5, 9, 1, 3, 4, 6, 8, 7, 2};
        SortContext context = new SortContext(new AscendingSort());
        context.sort(data);
        System.out.println(Arrays.toString(data));
        context.setStrategy(new DescendingSort());
        context.sort(data);
        System.out.println(Arrays.toString(data));
    }
}

在上面的代码中,我们使用了两种不同的排序策略,即升序排序和降序排序,通过上下文对象来选择相应的策略对象,从而实现了不同的排序算法。这样的实现方式避免了过多的if else语句,提高了代码的可维护性和可扩展性。

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/

看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]

在这里插入图片描述
加油!

共同努力!

Keafmd

感谢支持牛哄哄的柯南,期待你的三连+关注~~

keep accumulate for my dream【共勉】

                                                       ↓   ↓   ↓   ↓   ↓   ↓  

猜你喜欢

转载自blog.csdn.net/weixin_43883917/article/details/129304546
今日推荐