本文共 2378 字,大约阅读时间需要 7 分钟。
设计模式_行为型模式 - 策略模式
策略模式(Strategy Pattern)是一种行为模式,旨在通过定义一系列算法并将每个算法封装,使其可以相互替换且变化不影响客户端使用。常见的应用场景包括选择出行方式或开发工具时的行为切换。
策略模式通过将算法封装到独立的类中,使得算法的变化不会影响其使用者。其核心在于实现对算法的透明替换,符合“开闭原则”。
策略模式的主要角色包括:
百货公司在不同节日推出促销活动,使用策略模式来实现行为切换。
// 抽象策略类public interface Strategy { void show();}// 具体策略类public class StrategyA implements Strategy { public void show() { System.out.println("买一送一"); }}public class StrategyB implements Strategy { public void show() { System.out.println("满200元减50元"); }}public class StrategyC implements Strategy { public void show() { System.out.println("满1000元加一元换购任意200元以下商品"); }}// 环境类public class SalesMan { private Strategy strategy; public SalesMan(Strategy strategy) { this.strategy = strategy; } public void salesManShow() { strategy.show(); }}// 测试类public class Client { public static void main(String[] args) { SalesMan salesMan = new SalesMan(new StrategyA()); salesMan.salesManShow(); salesMan.setStrategy(new StrategyB()); salesMan.salesManShow(); salesMan.setStrategy(new StrategyC()); salesMan.salesManShow(); }} Arrays类的sort方法使用策略模式实现排序逻辑。
public class Arrays { public static void sort(T[] a, Comparator c) { if (c == null) { sort(a); } else { if (LegacyMergeSort.userRequested) { legacyMergeSort(a, c); } else { TimSort.sort(a, 0, a.length, c, null, 0, 0); } } }} Arrays类的sort方法通过传递Comparator实现对数据的自定义排序。
public class demo { public static void main(String[] args) { Integer[] data = {12, 2, 3, 2, 4, 5, 1}; Arrays.sort(data, new Comparator () { public int compare(Integer o1, Integer o2) { return o2 - o1; } }); System.out.println(Arrays.toString(data)); // [12, 5, 4, 3, 2, 2, 1] }} 在线程池管理中,策略模式用于决定如何处理任务提交和拒绝,确保系统高效稳定运行。
转载地址:http://izhfk.baihongyu.com/