1. 策略模式简介
策略模式(Strategy Pattern)是一种行为型设计模式,用于在运行时根据不同的情境选择不同的算法或策略。该模式将算法封装成独立的类,使得它们可以相互替换,而且可以独立于客户端使用它们的方式。
1.1. 主要角色
- 上下文(Context):负责与客户端进行交互,通常持有一个策略对象的引用,并将客户端的请求委派给策略对象执行。
- 策略(Strategy):定义了一个公共接口,用于封装不同的算法或策略。
- 具体策略(Concrete Strategies):实现了策略接口,提供具体的算法或策略逻辑。
1.2. 工作原理
- 定义一个策略接口,其中包含一个或多个方法用于执行具体的算法或策略。
- 创建具体的策略类,分别实现策略接口,提供不同的算法或策略实现。
- 在上下文类中维护一个策略对象的引用,客户端通过上下文类与策略进行交互。
- 客户端根据需求选择特定的策略对象,并将其传递给上下文类。
- 上下文类在接收到客户端请求后,将请求委派给当前持有的策略对象执行。
2. 策略模式代码设计
/*** @Author: stukk* @Description: 定义策略接口* @DateTime: 2023-12-16 21:46**/
public interface Strategy {void execute();
}/*** @Author: stukk* @Description: 执行策略一的代码* @DateTime: 2023-12-16 21:49**/
public class ConcreteStrategyA implements Strategy {@Overridepublic void execute() {System.out.println("执行策略一的代码");}
}/*** @Author: stukk* @Description: 执行策略二的代码* @DateTime: 2023-12-16 21:49**/
public class ConcreteStrategyB implements Strategy {@Overridepublic void execute() {System.out.println("执行策略二的代码");}
}/*** @Author: stukk* @Description: 客户端代码* @DateTime: 2023-12-16 21:51**/
public class StrategyDemo {public static void main(String[] args) {Strategy strategyA = new ConcreteStrategyA();Strategy strategyB = new ConcreteStrategyB();// 执行策略1Context context = new Context(strategyA);context.executeStrategy();// 执行策略2context.setStrategy(strategyB);context.executeStrategy();}}
3.策略模式应用场景
-
计算器应用:策略模式可以用于计算器应用,其中不同的操作(如加法、减法、乘法、除法)可以表示为不同的策略。通过选择相应的策略,可以根据用户的需求执行不同的计算操作。
-
支付系统:在支付系统中,可以使用策略模式来处理不同的支付方式。每个支付方式(如信用卡、支付宝、微信支付)可以被实现为一个具体的策略,并通过选择相应的策略来完成支付操作。
-
游戏开发:策略模式在游戏开发中也被广泛使用。例如,不同的敌人行为(如进攻、防守、逃跑)可以通过策略模式来实现。每个行为可以作为一个策略,游戏角色根据当前情况选择相应的策略来执行。