首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

策略模式中是否允许使用BaseClass

策略模式是一种软件设计模式,它允许在运行时根据不同情况选择不同的算法或行为。在策略模式中,我们可以定义一系列的策略类(通常是接口或抽象类),每个策略类都代表一种算法或行为,然后在运行时根据需要选择合适的策略类。

策略模式并不限制使用基类(BaseClass)。在实际应用中,我们可以使用基类来定义一些通用的属性和方法,然后由具体的策略类继承基类并实现自己的算法或行为。

使用基类的好处是可以提供一些通用的方法或属性,使得不同的策略类之间可以共享这些代码逻辑,避免重复编写相同的代码。同时,使用基类还可以方便地对策略类进行扩展和维护。

对于是否允许使用基类,这取决于具体的设计需求和架构。在一些情况下,使用基类可能会增加代码的复杂性或引入不必要的依赖关系。因此,我们需要根据实际情况进行权衡和设计。

总结起来,在策略模式中,允许使用基类来定义通用的属性和方法,以实现代码复用和扩展性。但是否使用基类应根据具体情况进行权衡和设计。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Go:使用策略模式

策略模式是一种常见的行为设计模式,它能够在运行时改变对象的行为。这一设计模式的主要目的是定义一系列算法,并将每种算法封装起来,使得它们可以互相替换。...在这篇文章,我们将探讨如何使用Go语言来实现策略模式,并通过一个实例进行演示。我们选择的实例是一个简单的数学问题:根据用户的选择,我们将实现一个计算器,支持加法、减法、乘法和除法。...定义策略接口 首先,我们需要定义一个策略接口,该接口将被所有具体的策略类实现。在这个例子,我们的策略是进行数学运算。...上下文使用了一些策略对象,该策略对象会改变上下文的执行算法。...当然,每种设计模式都有其适用场景,它们并非万能的。在使用设计模式时,我们应该根据实际的需求和场景来选择合适的模式,而不是强行套用。 希望本文能够帮助你理解策略模式,并能在实际的开发中找到其应用。

15520
  • Java避免if-else-if:策略模式策略模式(Policy)总结

    是否愿意来维护和扩展这样的代码?...环境角色:持有一个策略类的引用,最终给客户端调用。 策略模式让算法独立于使用它的客户而独立变化。策略模式重点是封装不同的算法和行为,不同的场景下可以相互替换。...3 )策略模式将造成产生很多策略类:可以通过使用享元模式在一定程度上减少对象的数量。 增加了对象的数目 Strategy增加了一个应用的对象的数目。...策略模式在实际工作也很常用,在博客你还在用if-else吗有过很好的阐述,策略模式不仅是继承的代替方案,还能很好地解决if-else问题。下面结合本文之前的例子来说明一下如何使用策略模式。...策略模式将造成产生很多策略类:可以通过使用享元模式在一定程度上减少对象的数量。 增加了对象的数目 Strategy增加了一个应用的对象的数目。

    2.3K40

    项目重构--使用策略模式

    namespace Oland.HSS.InHospital { public class BaseSwingCardWindow : BaseWindow { //检测读卡器是否打开...,仔细分析下,这不正好策略模式很像吗?...先看下策略模式的组成: ——抽象策略角色: 策略类,通常由一个接口或者抽象类实现。 ——具体策略角色:包装了相关的算法和行为。 ——环境角色:持有一个策略类的引用,最终给客户端调用。...再看下策略模式的定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。...好,我们对策略模式稍微有了了解,那我们开始重构这段代码: 首先讲下这段代码要实现的功能,他主要是刷卡功能的实现,有就诊卡,银行卡,医保卡等,每种卡对应不同的刷卡器,同时对应不同的信息提示与背景显示等.

    89390

    教你如何使用策略模式

    策略模式策略模式中一个类的行为或者其算法在运行是可以进行改变,这种的类型也可以叫做行为型模式。...场景 在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 一个系统需要动态地在几种算法中选择一种。...如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。...SpringBoot应用 接了个需求,对接第三方接口进行数据的校验,每一个第三方都是一套规范,考虑到后续的可扩展性,和内部的统一,使用策略类进行实现。...SpringUtil在Spring查找是否存在有该值的beanName,如果不存在,则直接保存操作记录后返回。

    74020

    使用策略模式重构ifelseifelseif

    medium.com/aia-sg-techblog/refactor-if-elseif-elseif-using-strategy-design-pattern-80c51913a539 ---- 策略设计模式是一种允许在运行时选择算法的行为...这种模式 定义了一系列算法 封装每种算法 使算法在该系列内可互换。 下面是策略设计模式的架构,客户端将在其中与上下文进行通信。...上下文将包含对策略对象的引用,这反映了另一个设计原则 “针对接口而非实现编程”。 让我们检查一下如何使用以下场景重构旧式 if else 语句。...让我们使用策略设计模式重构紧密耦合的代码。 策略接口及其实现 上下文对象持有策略参考 客户端代码如下所示 优点: 添加新策略不会干扰之前的任何代码。 移除/重构之前的任何策略都是灵活的。

    12420

    使用 map 实现策略模式

    上篇文章在谈到优化代码的时候,有一部分涉及到了使用策略模式优化我们的代码,本篇文章将围绕策略模式谈谈自己的思考~ What?...策略模式使得算法在用户使用的时候能独立的改变。如下图所示 ? Why ?...在软件开发也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径。...在软件编码,实现策略模式需要我们定义各种策略类,但是在 go 我们可以使用 map 来避免这一缺点,直接定义需要实现的策略方法即可。...“ 策略模式的精髓是封装一组算法实现以供使用时的调度,golang 里面有一个很重要的语法糖就是 func() 方法变量,因此,在 golang 实现类似策略模式的做法,不需要依赖于对象而进行,比如

    1.8K20

    使用策略模式重构 ifelseifelseif

    https://medium.com/aia-sg-techblog/refactor-if-elseif-elseif-using-strategy-design-pattern-80c51913a539 策略设计模式是一种允许在运行时选择算法的行为...这种模式 定义了一系列算法 封装每种算法 使算法在该系列内可互换。 下面是策略设计模式的架构,客户端将在其中与上下文进行通信。...上下文将包含对策略对象的引用,这反映了另一个设计原则 “针对接口而非实现编程”。 让我们检查一下如何使用以下场景重构旧式 if else 语句。...让我们使用策略设计模式重构紧密耦合的代码。 策略接口及其实现 上下文对象持有策略参考 客户端代码如下所示 优点: 添加新策略不会干扰之前的任何代码。 移除/重构之前的任何策略都是灵活的。

    16600

    教你如何使用策略模式

    策略模式策略模式中一个类的行为或者其算法在运行是可以进行改变,这种的类型也可以叫做行为型模式。...缺点 策略类会很多,一个行为一个策略类。 所有的策略类都需要对外暴漏。 场景 在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。...如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。...SpringBoot应用 接了个需求,对接第三方接口进行数据的校验,每一个第三方都是一套规范,考虑到后续的可扩展性,和内部的统一,使用策略类进行实现。...SpringUtil在Spring查找是否存在有该值的beanName,如果不存在,则直接保存操作记录后返回。

    1K61

    使用策略模式消除if else

    策略模式(Strategy Pattern)定义了一组策略,分别在不同类中封装起来,每种策略都可以根据当前场景相互替换,从而使策略的变化可以独立于操作者。...:因为之后修改任何一个逻辑,当前类都会被修改 开闭原则(对扩展开放,对修改关闭):如果此时需要添加(删除)某个逻辑,那么不可避免的要修改原来的代码 因为违反了以上两个原则,尤其是当 if-else 块的代码量比较大时...,后续代码的扩展和维护就会逐渐变得非常困难且容易出错 if-else 不超过 2 层,块中代码 1~5 行,直接写到块,否则封装为方法 if-else 超过 2 层,且块中代码超过 3 行,尽量使用策略模式...下面是PHP策略模式的demo,需求是当需要发送各种通知的时候 , 比如发送短信 ,发送邮件 , 发送微信通知 等等 ,可以拆分成一个个策略 factory->register($t); } } public function doAction(){ //根据传递的type参数 , 选择使用哪一个策略

    84630

    【设计模式】汉堡的设计模式——策略模式

    目录 【设计模式】汉堡的设计模式——策略模式 每章一句 前言 情景带入 开始分析 策略模式 尝试编码 如果我要新添加一种形式呢?...games 前言 哈喽,大家好,今天要分享的知识点是关于策略模式使用,观看本文章可能需要耗费【8】分钟,通过本文,你可以认识到以下几个知识点 什么是策略模式 针对策略模式的局限,又有哪些解决办法 枚举策略了解一下...策略模式 标准定义以及类图 定义一组算法,并封装每个算法,让它们彼此可以交换使用。...实在是很nice 策略模式的优点 其实刚刚也讲了,这里再总结一下 算法的具体实现封装在各个实现类,客户端不需要知道 客户端可以根据场合随意切换到底要使用哪一种策略 将客户端与具体实现通过Context...给出完整的代码 客户端调用情况 可以发现,原本各个实现类都不需要了,只需要在枚举定义成员,即可达成原来的效果,而且在匹配对应的策略时,直接使用循环的方式,看起来非常的清爽 如果要添加新的策略

    82100

    使用策略+工厂模式彻底干掉代码的if else!

    其实,if-else是有办法可以消除掉的,其中比较典型的并且使用广泛的就是借助策略模式和工厂模式,准确的说是利用这两个设计模式的思想,彻底消灭代码的if-else。...这个例子以及策略模式的相关知识,读者可以在《如何给女朋友解释什么是策略模式?》一文中学习。 但是,真正在代码中使用,比如在一个web项目中使用,上面这个Demo根本没办法直接用。...其实,在之前的《如何给女朋友解释什么是策略模式?》一文,我们介绍了很多策略模式的优点。但是,策略模式使用上,还是有一个比较大的缺点的: 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。...其实,如果读者们对策略模式和工厂模式了解的话,文中使用的并不是严格意义上面的策略模式和工厂模式。...首先,策略模式重要的Context角色在这里面是没有的,没有Context,也就没有用到组合的方式,而是使用工厂代替了。

    4.2K30

    工作的设计模式 —— 策略模式

    前言 策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类,以使算法的对象能够相互替换。...1 使用场景 策略模式在工作中使用的相对是比较多的,像支付场景,计费场景,优惠场景,活动奖励、用户等级等等。 当然也有很多直白的说法,就是替换一大堆的 if else。...而使用策略模式的目的,就是当又增加了 ddd、eee 等等的时候,更方便的扩展。...这里以工作遇到的场景举例: 这里选择使用理财储蓄场景的计费策略举例:在理财储蓄场景,需要每日给用户发放利息,同时用户分为普通用户、持卡用户,他们有分别的利率以及计息方式。 ?...很明显,在计费时要使用策略模式,按照以下模式进行开发。

    56920

    使用策略模式替代if-else

    改动过程中发现自己代码写的有点混乱,而且现在新增的逻辑代码更是雪上加霜,所以有了今天这篇文章 正文 在最开始的时候我使用枚举来返回请假类型对应基本分数和绩效分数,如下代码。...百度得到答案大多都是使用策略模式,把业务逻辑都控制在每种情况的实体类,这里我也参考下网上的方式使用策略模式来完成这次逻辑变动(说来惭愧,前面自己还写过策略模式的文章,但是仍然不会实际运用,可见学的东西要真的用起来才能融会贯通...2)); System.out.println(abstractAttence.reducePerformanceScore(0.4, 2)); } } 到这里我们就使用策略模式来替代...if-else语句,优点很明显, 每个算法单独封装,减少了算法和算法调用者的耦合 合理使用继承有助于提取出算法的公共部分。...但是缺点也很明显 策略模式只适用于客户端知道所有的算法或行为的情况。 策略模式造成很多的策略类,每个具体策略类都会产生一个新类。不过可以使用享元模式来减少对象的数量。

    1.7K20

    在golang中使用策略模式

    策略模式是一种行为设计模式,它定义了一系列的算法,并将每一个算法封装起来,使得它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。 策略模式通常由三部分组成: 1....上下文(Context):这是使用策略对象的客户端代码或数据结构。 2. 策略接口(Strategy Interface):这是所有策略类所遵守的公共接口。 3....paymentMode: &CreditCardStrategy{}} fmt.Println(cart.checkout()) // Paid 300 using Credit Card } 在这个例子,...ShoppingCart 是上下文,它使用 PaymentStrategy 来进行付款。 策略模式的优点是可以让你的代码更易于维护和扩展。...同时,策略模式也可以提高代码的可测试性,因为你可以使用模拟对象(mocks)来替换实际的策略对象,这样就可以轻松地在没有真实支付系统的情况下测试你的代码。

    26710
    领券