使用策略模式重构 if/elseif/elseif

使用,策略,模式,重构,if,elseif · 浏览次数 : 25

小编点评

**重构旧式 if else 语句使用策略设计模式** **背景** 使用 `if else` 语句来选择算法的行为具有简易性,但其局限性也显现。当我们需要添加或修改任何传输方式时,代码结构会变得越来越复杂,并可能影响业务逻辑的实现。 **策略设计模式** 策略设计模式是一种允许在运行时选择算法的行为。它定义了一系列算法封装每种算法,使算法在该系列内可互换。 **重构旧式 if else 语句** 以下是用策略设计模式重构旧式 `if else` 语句的示例: ```python class Strategy: def execute(self, context): pass class StrategyA(Strategy): def execute(self, context): # 处理策略 A 的逻辑 class StrategyB(Strategy): def execute(self, context): # 处理策略 B 的逻辑 class Context: def __init__(self, strategy): self.strategy = strategy def execute(self): self.strategy.execute(self) # 使用策略设计模式 context = Context(StrategyA()) context.execute() # 也可以使用其他策略 context = Context(StrategyB()) context.execute() ``` **优点** * **紧密耦合:**客户端代码与策略对象仅通过接口进行通信,避免了业务逻辑的隐藏。 * **易于维护:**只需修改策略类即可添加或移除算法。 * **易于测试:**每个策略类可以单独测试。 * **灵活性:**可以使用不同的策略实现不同的算法。 **结论** 策略设计模式是一种有效的设计模式,可用于重构旧式 `if else` 语句并保持代码的紧密耦合和易于维护。

正文

本文翻译自国外论坛 medium,原文地址:https://medium.com/aia-sg-techblog/refactor-if-elseif-elseif-using-strategy-design-pattern-80c51913a539


策略设计模式是一种允许在运行时选择算法的行为。这种模式

  • 定义了一系列算法
  • 封装每种算法
  • 使算法在该系列内可互换。

下面是策略设计模式的架构,客户端将在其中与上下文进行通信。上下文将包含对策略对象的引用,这反映了另一个设计原则 “针对接口而非实现编程”

让我们检查一下如何使用以下场景重构旧式 if else 语句。

这种设计的问题在于,每当我们需要添加或修改任何传输方式时,它总是会影响业务逻辑的实现。

让我们使用策略设计模式重构紧密耦合的代码。

策略接口及其实现

上下文对象持有策略参考

客户端代码如下所示

优点:

  1. 添加新策略不会干扰之前的任何代码。
  2. 移除/重构之前的任何策略都是灵活的。
  3. 易于单一测试。

关注公众号【waynblog】每周分享技术干货、开源项目、实战经验、高效开发工具等,您的关注将是我的更新动力!

与使用策略模式重构 if/elseif/elseif相似的内容:

使用策略模式重构 if/elseif/elseif

本文翻译自国外论坛 medium,原文地址:https://medium.com/aia-sg-techblog/refactor-if-elseif-elseif-using-strategy-design-pattern-80c51913a539 策略设计模式是一种允许在运行时选择算法的行为。这

rerank来提升RAG的准确度的策略

RAG(Retrieval-Augmented Generation)是一种结合检索和生成两种技术的模型,旨在通过检索大规模知识库来增强文本生成任务的准确性。 要通过reranking(重排序)来提升RAG的准确度,可以采取以下策略: 1. 使用更精细的评分函数 RAG通常会在检索阶段根据输入问题或

聚类模型的算法性能评价

一、概述 作为机器学习领域的重要内容之一,聚类模型在许多方面能够发挥举足轻重的作用。所谓聚类,就是通过一定的技术方法将一堆数据样本依照其特性划分为不同的簇类,使得同一个簇内的样本有着更相近的属性。依不同的实现策略,聚类算法有很多种,如基于距离的k-means、基于密度的DBSCAN等。在聚类完成之后

使用策略模式优化你的代码

策略模式简介 策略模式(Strategy Pattern:Define a family of algorithms,encapsulate each one,and make them interchangeable.)中文解释为:定义一组算法,然后将这些算法封装起来,以便它们之间可以互换,属于一

【设计模式】策略模式

一、介绍 策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。 这里列举两个例子来说明下策略模式的使用场景: (1)根据会员等级来计算折扣力度。不同等级拥有不同的折扣力度,这样就可以根据策略模式去灵活的计算,就算之后又新增了几个等级的会员,

万字详解常用设计模式

本文是博主在工作中对常用设计模式的使用经验总结归纳而来分享给大家。 设计模式一共有23种,本文讲解涉及如下: 责任链模式 模板方法模式 发布订阅模式 策略模式 三大分类 业界一般将设计模式分为三大类: 创建型模式:对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。有五种创建型模

深入理解java和dubbo的SPI机制

1 SPI简介 1.1 SPI(Service Provider Interface) 本质:将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。 java SPI:用来设计给服务提供商做插件使用的。基于策略模式来实现动态加载的机制。我

【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

问题描述 使用微软API管理服务(Azure API Management),简称APIM。 因为公司策略要求只能内部网络访问,所以启用了VNET集成。集成方式见: (在内部模式下使用 Azure API 管理连接到虚拟网络:https://docs.azure.cn/zh-cn/api-manag

滴滴面试:谈谈你对Netty线程模型的理解?

Netty 线程模型是指 Netty 框架为了提供高性能、高并发的网络通信,而设计的管理和利用线程的策略和机制。 Netty 线程模型被称为 Reactor(响应式)模型/模式,它是基于 NIO 多路复用模型的一种升级,它的核心思想是将 IO 事件和业务处理进行分离,使用一个或多个线程来执行任务的一

行为型:策略模式

定义 定义一系列的算法,将他们一个个封装起来,使他们直接可以相互替换。 算法:就是写的逻辑可以是你任何一个功能函数的逻辑 封装:就是把某一功能点对应的逻辑给抽出来 可替换:建立在封装的基础上,这些独立的算法可以很方便的替换 通俗的理解就是,把你的算法(逻辑)封装到不同的策略中,在不同的策略中是互相独