设计模式-策略模式

前言:

设计模式不用就忘,之前在博客园写的设计模式就不放到csdn中了,加个锚点,方便日后温习:

设计模式------创建型模式之工厂模式 - 山月云星 - 博客园 (cnblogs.com)

正文:

策略模式允许在运行时选择算法或策略,而无需硬编码。下面是一个简单的策略模式示例,涉及两种不同的排序策略:升序和降序

java 复制代码
// 策略接口 
public interface SortingStrategy { 
    void sort(int[] numbers); 
}

创建两个实现了该策略接口的具体策略类

java 复制代码
// 升序排序策略
public class AscendingSortStrategy implements SortingStrategy {
    @Override
    public void sort(int[] numbers) {
        Arrays.sort(numbers);
    }
}

// 降序排序策略
public class DescendingSortStrategy implements SortingStrategy {
    @Override
    public void sort(int[] numbers) {
        int n = numbers.length;
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-i-1; j++) {
                if (numbers[j] > numbers[j+1]) {
                    // 交换元素
                    int temp = numbers[j];
                    numbers[j] = numbers[j+1];
                    numbers[j+1] = temp;
                }
            }
        }
    }
}

创建一个上下文类,它将使用选定的策略来执行操作

java 复制代码
public class Sorter { 
  private SortingStrategy strategy;
  
  public Sorter(SortingStrategy strategy) {
    this.strategy = strategy;
  }

  public void sortNumbers(int[] numbers) {
    strategy.sort(numbers);
  }
}

最后,客户端代码可以动态选择并使用不同的排序策略

java 复制代码
public class ClientCode {
    public static void main(String[] args) {
        int[] numbers = {5, 3, 8, 1, 9};

        Sorter ascendingSorter = new Sorter(new AscendingSortStrategy());
        ascendingSorter.sortNumbers(numbers);
        System.out.println("Ascending order: " + Arrays.toString(numbers));

        Sorter descendingSorter = new Sorter(new DescendingSortStrategy());
        descendingSorter.sortNumbers(numbers);
        System.out.println("Descending order: " + Arrays.toString(numbers));
    }
}

SortingStrategy 是策略接口,AscendingSortStrategy 和 DescendingSortStrategy 是具体的策略实现,Sorter 是上下文,它使用策略来执行排序操作。客户端代码可以根据需要选择不同的策略对象。

相关推荐
我爱cope1 小时前
【从0开始学设计模式-8| 桥接模式】
java·设计模式·桥接模式
AI大法师3 小时前
从 Firefox Kit 看懂品牌升级的正确顺序
大数据·人工智能·设计模式·firefox
程序员老邢3 小时前
【技术底稿 14】通用文件存储组件:SpringBoot 自动装配 + 多存储适配
java·spring boot·后端·阿里云·微服务·策略模式
天若有情6734 小时前
原创C++设计模式:功能归一化——无继承、轻量版AOP,比传统OOP更优雅
开发语言·c++·设计模式·oop
绿豆人1 天前
Go设计模式学习
学习·设计模式·golang
逮到647了1 天前
23种设计模式简述
设计模式
爱吃烤鸡翅的酸菜鱼1 天前
【Java】封装位运算通用工具类——用一个整数字段替代几十个布尔列,极致节省存储空间
java·开发语言·设计模式·工具类·位运算·合成复用原则
geovindu1 天前
go: Model,Interface,DAL ,Factory,BLL using mysql
开发语言·mysql·设计模式·golang·软件构建
guojb8241 天前
当 Vue 3 遇上桥接模式:手把手教你优雅剥离虚拟滚动的业务大泥球
vue.js·设计模式
我登哥MVP1 天前
【Spring6笔记】 - 15 - Spring中的八大设计模式
java·spring boot·笔记·spring·设计模式·intellij-idea