行为型模式-策略模式的概述与实践

news/2024/10/18 10:15:07/

1 概述

1.1 定义

策略模式是针对对象行为的编程模式。下面是我对策略模式的理解。

(1)定义:在某个处理流程中,存在多个类似或平级的处理逻辑(或算法),并且执行哪个或哪

几个逻辑由具体条件来确定。此时可以将这些处理逻辑抽象为策略接口和具体策略类,由策略管理

类来管理这些策略。通过策略管理器来选择和执行具体的策略。

(2)策略模式的关键点在于“策略接口”、“具体策略类”和“策略管理类”

(3)使用策略模式的关键步骤为:

  • 创建表示各种策略的具体策略类,且实现同一个策略接口;
  • 创建一个根据行为类型动态选择和执行对应策略的策略管理类。

1.2 解决的问题

在有多种相似算法的情况下,使用策略模式可以解决使用 if...else 所带来的复杂性和可维护性差的

问题。

2 实践

下面是使用策略模式来管理不同类型的数学运算逻辑的案例。

2.1 策略接口

下面是数学运算策略接口类。

/*** 数据操作策略父类*/
public interface MathOperationStrategy {/*** 判断是否执行此策略* @param operateType* @return*/boolean check(Integer operateType);/*** 执行策略** @param num1* @param num2* @return*/int doOperation(int num1, int num2);
}/*** 数学运算策略类型*/
public enum MathOperationStrategyTypeEnum {/*** 常用类型*/add(1, "加"),subtract(2, "减"),multiply(3, "乘"),;private Integer code;private String name;MathOperationStrategyTypeEnum(Integer code, String name) {this.code = code;this.name = name;}public Integer getCode() {return code;}public String getName() {return name;}
}

2.2 具体策略类

下面是不同类型的数学运算策略类。

@Service
public class OperationAdd implements MathOperationStrategy {@Overridepublic boolean check(Integer operateType) {return Objects.equal(MathOperationStrategyTypeEnum.add.getCode(), operateType);}@Overridepublic int doOperation(int num1, int num2) {return num1 + num2;}}@Service
public class OperationSubtract implements MathOperationStrategy {@Overridepublic boolean check(Integer operateType) {return Objects.equal(MathOperationStrategyTypeEnum.subtract.getCode(), operateType);}@Overridepublic int doOperation(int num1, int num2) {return num1 - num2;}}@Service
public class OperationMultiply implements MathOperationStrategy {@Overridepublic boolean check(Integer operateType) {return Objects.equal(MathOperationStrategyTypeEnum.multiply.getCode(), operateType);}@Overridepublic int doOperation(int num1, int num2) {return num1 * num2;}}

2.3 策略管理类

下面是策略管理类。可以用于管理不同的策略类。

/*** 策略管理类*/
@Service
public class StrategyContext {@Resourceprivate List<MathOperationStrategy> mathOperationStrategyList;/*** 选择和执行数学运算策略** @param operateType 操作类型* @param num1* @param num2* @return* @see MathOperationStrategyTypeEnum 操作类型*/public int executeMathOperationStrategy(int operateType, int num1, int num2) {for (MathOperationStrategy strategy : mathOperationStrategyList) {if (strategy.check(operateType)) {return strategy.doOperation(num1, num2);}}throw new UnsupportedOperationException("该操作类型:[" + operateType + "]暂不支持");}}

2.4 测试

下面是通过策略管理类选择和执行具体的策略。

    /*** 策略*/@Testpublic void strategy() {int result = strategyContext.executeMathOperationStrategy(MathOperationStrategyTypeEnum.multiply.getCode(), 2, 7);System.out.println("executeStrategy result: " + result);}


http://www.ppmy.cn/news/1426518.html

相关文章

Qt中定时器的3种实现方法

一.使用QTimer定时器类&#xff08;首选&#xff09; 1.示例代码&#xff1a; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->setupUi(this); time1 new QTimer(); time1->setInterval(1000…

MATLAB绘制圆锥曲线:抛物线,双曲线,椭圆

MATLAB绘制圆锥曲线:抛物线,双曲线,椭圆 clc;close all;clear all;warning off;%清除变量x linspace(-10, 10, 1000); % 创建一个x值的向量&#xff0c;范围从-10到10&#xff0c;共1000个点 y x.^2; % 计算每个x值对应的y值% 使用plot函数绘制图形 figure; % 创建一个新的图…

mybatis-generator 自动生成实体类和mapper.xml文件项目搭建

1.创建空java maven项目 2.pom引入数据库驱动和mybatbis自动生成工具依赖 mysql数据库 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSc…

Uni-app中实现数据选择并回传给上个页面的方法

当我们在Uni-app中进行页面间数据传递时&#xff0c;通常会涉及到数据的选择以及回传给上个页面的需求。为了达到这个目的&#xff0c;我们可以利用Uni-app提供的事件机制和页面导航方法来实现。以下是一种实现方式&#xff1a; 数据选择并回传给上个页面的方法 第一步&#…

后端自测帮助指南

问题&#xff1a; 前端反馈联调时间过长&#xff0c;原因是后端接口质量不高&#xff0c;联调时反复出问题&#xff0c;然后花时间去修改bug然后发布后前端才能调&#xff0c;如此一次至少也半个小时了。测试阶段&#xff0c;后端花太多时间配合&#xff0c;测试的冒烟测试往往…

配置路由器并进行设备通信

实验环境&#xff1a; 两台PC两台路由器 拓扑图: 需求描述&#xff1a; 通过PC端实现PC5与PC6的通信 实验步骤&#xff1a; 1.1两台路由器进行ip的配置&#xff1a; 两台路由器的各个端口配置都类似如下代码&#xff0c;这里就不重复描述了&#xff1a; Router#conf t En…

【行为型模式】观察者模式

一、观察者模式概述​ 软件系统其实有点类似观察者模式&#xff0c;目的&#xff1a;一个对象的状态或行为的变化将导致其他对象的状态或行为也发生改变&#xff0c;他们之间将产生联动。 观察者模式属于对象行为型&#xff1a; 1.定义了对象之间一种一对多的依赖关系&#xff…

SQL优化——统计信息

文章目录 1、统计信息1.1、表的统计信息1.2、列的统计信息1.3、索引的统计信息 2、统计信息重要参数设置3、检查统计信息是否过期4、扩展统计信息5、动态采样6、定制统计信息收集策略 只有大表才会产生性能问题&#xff0c;那么怎么才能让优化器知道某个表多大呢&#xff1f;这…