方法器 --- 策略模式(Strategy Pattern)

1.这是我自己总结出来的,结合比较器。

如果函数有多个策略实现,可以用策略接口进行封装 ,如果函数有n个策略实现,那我们就创建n个继承策略接口的类,然后再进行重写。

例如:吃饭函数,可以用筷子吃,也可以用勺子吃,如果前期选择用筷子吃策略,后期想用勺子策略吃,就只能将筷子策略注释掉进行重写了,又或者前期引入if else 语句,但会导致不好维护。

java 复制代码
// 1. 定义策略接口
public interface Fun {
    public void function();
}

// 2. 具体策略实现
public class FunA implements Fun {
    public void function() {
        System.out.println("FunA具体实现");
    }
}

public class FunB implements Fun {
    public void function() {
        System.out.println("FunB具体实现");
    }
}

// 3. 上下文类使用策略
public class Main {
    public static void test(Fun f) {  // 接收接口类型,多态的体现
        f.function();
    }
    
    public static void main(String[] args) {
        test(new FunB());  // 使用策略B
        test(new FunA());  // 使用策略A
    }
}

2.更完整的例子:排序策略

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

// 具体策略
class BubbleSort implements SortStrategy {
    public void sort(int[] array) {
        System.out.println("使用冒泡排序");
        // 实现冒泡排序算法
    }
}

class QuickSort implements SortStrategy {
    public void sort(int[] array) {
        System.out.println("使用快速排序");
        // 实现快速排序算法
    }
}

class MergeSort implements SortStrategy {
    public void sort(int[] array) {
        System.out.println("使用归并排序");
        // 实现归并排序算法
    }
}

// 上下文类
class Sorter {
    private SortStrategy strategy;
    
    public void setStrategy(SortStrategy strategy) {
        this.strategy = strategy;
    }
    
    public void executeSort(int[] array) {
        strategy.sort(array);
    }
}

// 使用
public class Main {
    public static void main(String[] args) {
        Sorter sorter = new Sorter();
        int[] data = {5, 2, 8, 1, 9};
        
        // 动态切换策略
        sorter.setStrategy(new BubbleSort());
        sorter.executeSort(data);
        
        sorter.setStrategy(new QuickSort());
        sorter.executeSort(data);
    }
}
相关推荐
num_killer8 小时前
小白的Langchain学习
java·python·学习·langchain
期待のcode9 小时前
Java虚拟机的运行模式
java·开发语言·jvm
程序员老徐9 小时前
Tomcat源码分析三(Tomcat请求源码分析)
java·tomcat
a程序小傲9 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
仙俊红9 小时前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥9 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
小楼v9 小时前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法
与遨游于天地9 小时前
NIO的三个组件解决三个问题
java·后端·nio
czlczl2002092510 小时前
Guava Cache 原理与实战
java·后端·spring
yangminlei10 小时前
Spring 事务探秘:核心机制与应用场景解析
java·spring boot