探索灵活性与可维护性的利器:策略(Strategy)模式详解

news/2024/10/26 11:19:19/

目录

​编辑

1. 策略模式概述:

2. 主要角色:

3. 实例场景:

4. 具体实现步骤:

步骤一:定义策略接口

5. 使用策略模式的客户端代码:

总结:

我的其他博客


 

1. 策略模式概述:

策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。策略模式使得算法可以独立于客户端而变化,从而使客户端可以选择不同的算法,而不会影响到客户端的代码。

2. 主要角色:

  • Context(上下文): 维护一个对策略对象的引用,并在运行时切换不同的策略。

  • Strategy(策略接口): 定义了所有支持的算法的公共接口。通常是一个接口或抽象类。

  • ConcreteStrategy(具体策略): 实现了策略接口,提供具体的算法实现。

3. 实例场景:

考虑一个支付系统,根据不同的支付方式采用不同的支付策略。策略模式可以使得新增支付方式时不必修改现有代码,只需添加新的支付策略即可。

4. 具体实现步骤:

步骤一:定义策略接口
// Strategy 接口
public interface PaymentStrategy {void pay(int amount);
}

步骤二:实现具体的策略

// ConcreteStrategy1
public class CreditCardPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("Paid " + amount + " via Credit Card.");}
}// ConcreteStrategy2
public class PayPalPayment implements PaymentStrategy {@Overridepublic void pay(int amount) {System.out.println("Paid " + amount + " via PayPal.");}
}

步骤三:定义上下文类 

// Context
public class ShoppingCart {private PaymentStrategy paymentStrategy;public void setPaymentStrategy(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void checkout(int amount) {paymentStrategy.pay(amount);}
}

5. 使用策略模式的客户端代码:

public class Client {public static void main(String[] args) {ShoppingCart cart = new ShoppingCart();// 选择支付策略PaymentStrategy creditCardPayment = new CreditCardPayment();PaymentStrategy payPalPayment = new PayPalPayment();// 设置支付策略cart.setPaymentStrategy(creditCardPayment);// 进行支付cart.checkout(100);// 切换支付策略cart.setPaymentStrategy(payPalPayment);// 进行支付cart.checkout(150);}
}

 

总结:

策略模式通过将算法封装在独立的策略类中,使得算法的变化不影响到使用算法的客户端。这种灵活性和可维护性使得策略模式在面对多种算法选择时非常有用,同时提高了代码的可扩展性。

我的其他博客

Git命令大全:从基础到高级应用-CSDN博客

简单介绍一些其他的树-CSDN博客

什么是tomcat?tomcat是干什么用的?-CSDN博客

TCP/IP 四层体系结构-CSDN博客

Redis新数据类型-Bitmaps-CSDN博客

腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客Synchronized 优化-CSDN博客腾讯-轻量应用服务器centos7中宝塔安装MySQL8.0出现内存不足-CSDN博客

【计算机网络】URL概念及组成-CSDN博客

【计算机网络】TCP socket编程-CSDN博客

枚举类的final修饰-CSDN博客

什么是RabbitMQ-CSDN博客

 

 

 


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

相关文章

android 13.0 Launcher3定制folder文件夹16宫格实现一

1. 概述 在13.0的系统产品rom定制化开发中,对于Launcher3的定制功能也是不少的,比如在Launcher3中添加默认文件夹,把默认的app添加的文件夹里面,其他的app 然后按顺序排序。在文件夹布局就是默认的16宫格布局,接下来分析下相关源码来实现功能 2.Launcher3定制化之修改添…

Linux---获取管理员权限的相关命令

1. sudo命令的使用 命令说明sudo -s切换到root用户,获取管理员权限sudo某个命令的执行需要获取管理员权限可以在执行命令前面加上sudo sudo -s效果图: sudo 命令效果图: 说明: 如果只是某次操作需要使用管理员权限建议使用 sudo , 也就是说临时使用管理器权限。…

[Excel] vlookup函数

VLOOKUP用法 VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])其中: lookup_value是你要查找的值table_array是你要在其中进行查找的表格区域col_index_num是你要返回的在table_array中列索引号range_lookup是一个可选参数,用于指定…

http状态码(一)400报错

一 400报错汇总 ① 综述 一、4xx状态码报错说明: 客户端行为导致的报错二、通用的4xxHTTP报错1) 4002) 4013) 4034) 4045) 405 --> 不允许方法,可能跨域或者nginx限制请求方法6) 4087) 4138) 419三、ngin自身定义的4xx报错495、496、497、498、4…

TDsql中联合主键怎么创建,Hibernate注解映射联合主键

两种方式: 1,建表时创建 2,建表后再添加主键 一,建表时创建 CREATE TABLE 表名 (列名1 数据类型,列名2 数据类型,...PRIMARY KEY (列名1, 列名2) );如果想给主键起个名字,可以这么写&#xff…

静态路由原理与配置

文章目录 静态路由原理与配置一、路由器的工作原理1、路由概述2、路由器的工作原理 二、路由表的形成1、路由表2、路由表的形成 三、静态路由和默认路由1、静态路由的缺点2、默认路由(是特殊的静态路由)3、查看路由表 四、路由器转发数据包的封装过程五、…

接口测试 — 5.接口测试框架的设计

(一)接口测试框架的思想 自动化测试框架不是一个模式,而是一种思想和方法的集合,通俗的讲就是一个架构。 为了更好的了解自动化测试框架,应该对以下几种自动化测试框架思想有一定的认知: 模块化思想 库思…

轻量封装WebGPU渲染系统示例<52>- Json数据描述材质、纹理等3D渲染场景信息

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/DataDrivenScene3.ts 当前示例运行效果: ​​​​​​​ Json数据: {"renderer": {"mtplEnabled": true,"camera": {"eye&quo…