设计模式详解---策略模式

1. 策略模式简介

        策略模式(Strategy Pattern)是一种行为型设计模式,用于在运行时根据不同的情境选择不同的算法或策略。该模式将算法封装成独立的类,使得它们可以相互替换,而且可以独立于客户端使用它们的方式。

1.1. 主要角色
  • 上下文(Context):负责与客户端进行交互,通常持有一个策略对象的引用,并将客户端的请求委派给策略对象执行。
  • 策略(Strategy):定义了一个公共接口,用于封装不同的算法或策略。
  • 具体策略(Concrete Strategies):实现了策略接口,提供具体的算法或策略逻辑。
1.2. 工作原理
  1. 定义一个策略接口,其中包含一个或多个方法用于执行具体的算法或策略。
  2. 创建具体的策略类,分别实现策略接口,提供不同的算法或策略实现。
  3. 在上下文类中维护一个策略对象的引用,客户端通过上下文类与策略进行交互。
  4. 客户端根据需求选择特定的策略对象,并将其传递给上下文类。
  5. 上下文类在接收到客户端请求后,将请求委派给当前持有的策略对象执行。

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 {

    @Override
    public void execute() {
        System.out.println("执行策略一的代码");
    }
}


/**
 * @Author: stukk
 * @Description: 执行策略二的代码
 * @DateTime: 2023-12-16 21:49
 **/
public class ConcreteStrategyB implements Strategy {

    @Override
    public 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();

//        执行策略1
        Context context = new Context(strategyA);
        context.executeStrategy();

//        执行策略2
        context.setStrategy(strategyB);
        context.executeStrategy();

    }

}



3.策略模式应用场景

  1. 计算器应用:策略模式可以用于计算器应用,其中不同的操作(如加法、减法、乘法、除法)可以表示为不同的策略。通过选择相应的策略,可以根据用户的需求执行不同的计算操作。

  2. 支付系统:在支付系统中,可以使用策略模式来处理不同的支付方式。每个支付方式(如信用卡、支付宝、微信支付)可以被实现为一个具体的策略,并通过选择相应的策略来完成支付操作。

  3. 游戏开发:策略模式在游戏开发中也被广泛使用。例如,不同的敌人行为(如进攻、防守、逃跑)可以通过策略模式来实现。每个行为可以作为一个策略,游戏角色根据当前情况选择相应的策略来执行。

猜你喜欢

转载自blog.csdn.net/m0_54409739/article/details/135038264
今日推荐