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

Python设计模式(14):策略模式

01 策略模式的概念与机制 策略模式定义了一系列的算法,将每一个算法封装起来,并且使它们之间可以相互替换。策略模式让算法的变化不会影响到使用算法的客户。 下图是正式的策略模式设计类图。 ?...在以下情况之一发生时可以使用策略模式。 当有多个仅在行为上不同但是相关的类存在时,策略模式提供了一个为一个类配置多种行为之一的方法。...使用策略模式的缺点为,客户程序必须知道不同策略接口的各个子类的行为,必须理解每个子类有哪些不同。...02 关于策略模式的讨论 使用策略模式的出发点主要考虑如下。 将一组相关的算法封装为各个策略分支,从而将策略分支相关的代码隐藏起来。 希望可以提供程序的扩展性。 那么,策略模式的可扩展性究竟怎么样呢?...下面将就该模式的可扩展性进行一些基本讨论。 实际上,策略模式的初衷是要减少与各个分支下的行为相关的条件语句。这已经通过将一个具有条件相关的多种行为的类拆分成一个策略超类与若干个策略子类得到了解决。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    设计模式Python策略模式实现,真实项目背景

    今天给大家讲解一下设计模式中的策略模式,下面的图片是真实项目中的前端图片,目前接入了三个算法能力,根据产品经理要求,后期还会有不同的算法加入进来,这个时候我们需要考虑一个好的结构对代码进行优化,可能有一些小伙伴会说直接使用...接下来我们来讲解一下策略模式的使用。 ?...解决方案 在讲解了多分支语句可能带来的风险和弊端后,我们引入策略模式。看下图,我们将不同的算法封装到独立的类中,也就是抽象出来一个接口,新加入的算法类必须实现这个接口的策略方法。 ?...它会通过同样的通用接口与所有策略进行交互, 而该接口只需暴露一个方法来触发所选策略中封装的算法即可。指向具体策略的引用, 且仅通过策略接口与该对象进行交流。 ?...无须对上下文代码进行修改,就可以添加新的代码 缺点 如果算法逻辑,较为固定,不经常修改,使用策略模式只会增加代码量 总结 下面我们来总结一下,使用策略模式的步骤 ?

    1.2K20

    Python 中的设计模式详解之:策略模式

    1、策略模式概述 策略模式:定义一系列算法,把它们一一封装起来,并且使它们之间可以相互替换。此模式让算法的变化不会影响到使用算法的客户。...在这个示例中,实例化订单(Order 类)之前,系统会以某种方式选择一种促销折扣策略,然后把它传给 Order 构造方法。具体怎么选择策略,不在这个模式的职责范围内。(选择策略可以使用工厂模式。)...的确如此,在 Python 中,我们可以把具体策略换成了简单的函数,并且去掉策略的抽象类。...而 Python 中,函数天然就可以当做参数来传递。 值得注意的是,《设计模式:可复用面向对象软件的基础》一书的作者指出:“策略对象通常是很好的享元。”...函数比用户定义的类的实例轻量,而且无需使用“享元”模式,因为各个策略函数在 Python 编译模块时只会创建一次。普通的函数也是“可共享的对象,可以同时在多个上下文中使用”。

    66020

    设计模式策略模式_策略模式和状态模式

    概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。...在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。...策略模式旨在解决不同逻辑下相同的对象执行不同策略的问题。...当我们遇到同一个方法,里面会根据需要多个逻辑的分支,分支里的行为都不同,但是都服务于同一个功能,这个时候就可以使用策略模式,将行为抽象为一个策略接口中的抽象方法,由接口的实现类——也就是策略类——去实现各中具体的行为...策略模式也是一种比较常见且好用的设计模式,线程池的拒绝策略就使用了策略模式

    85520

    策略模式

    策略模式让算法独立于使用它的客户而变化。...——《设计模式:可复用面向对象软件的基础》 图示 策略模式结构图: 角色 策略模式有三个角色,分别是: 抽象策略角色(Strategy):是所有具体策略类共同的接口 具体策略角色(ConcreteStrategy...今天写策略模式时,忽然想到了这个。 渣男有一个葵花宝典,面对不同的女性,使用不同的套路,只为得到女人的心。面对拜金女,显示自己的有钱,买金卖银。面对爱才女,写诗写词。...在Spring中的策略模式: 依赖注入时,Spring IoC容器会应用策略模式选择使用哪种策略。 还有Spring IoC容器在运行时决定在开发环境使用H2数据源,在生产环境MySQL。...) 策略模式会产生很多策略类,多后期学习维护增加一定难度 总结 策略模式封装算法,提供给上下文选择使用,客户端无需关心算法具体逻辑,无需关系关系算法更替,但是使用前需要知道具体策略类。

    32820

    策略模式

    策略模式定义: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换,策略模式让算法独立于使用它的客户而独立变化。...策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同额方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。 策略模式UML类图: ?...具体实例如下(一个超市促销时采用不同的策略,比如打折,返利等): 抽象策略类 namespace DesignPattern.策略模式 { //现金收费抽象类 abstract class...namespace DesignPattern.策略模式 { //正常收费子类 class CashNormal : CashSuper { public override...多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。 2. 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。 3.

    64310

    策略模式

    在设计模式中,可以使用工厂模式或者策略模式来处理这类问题,之前已经分享了工厂模式,感兴趣的同学可以去复习一下。...设计模式系列往期文章: 单例模式 工厂模式 流程引擎 建造者模式 原型模式 责任链模式 观察者模式 那么工厂模式策略模式有什么区别呢?...策略模式是属于行为型设计模式,主要是针对不同的策略做出对应行为,达到行为解偶 本次就来具体聊聊策略模式它是如何做到行为解耦 大纲 ? 定义 什么是策略模式?它的原理实现是怎么样的?...首先都是类似于这样定义一个线程池,里面实现线程池的异常策略。 这个线程池的异常策略就是用的策略模式的思想。 ?...业务改造举例 在真实的业务场景中策略模式也还是应用很多的。

    47520

    策略模式

    策略模式(Strategy Pattern) 给一个对象(context )以不同的策略(Strategy ),该对象就会执行不同的策略算法,这里需要三个对象 策略算法接口 每个算法的具体实现 Context...流程 2.1 策略算法接口 public interface Strategy { abstract void travel(); } 2.2 策略算法的具体实现 坐飞机 public class...this.st = st; } public void Setout(){ System.out.println("Coneext去旅游——————策略算法为...-------------"); Context c2 = new Context(new train()); c2.Setout(); } Coneext去旅游——————策略算法为...: 坐飞机 ------------------------------ Coneext去旅游——————策略算法为: 坐火车 说到底策略模式和装饰者模式还是有很大的相似性,都是通过包装来实现----装饰者模式

    43010

    策略模式

    策略模式"Head + First"书中为策略模式设计的实际场景是为鸭子类添加功能。...策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。策略模式是很基础的一种设计模式,在面向对象初期便应该考虑到这种模式的应用。...策略模式的根本思想是将静态和动态的部分分离,将可变的部分总结为接口,以一种不变的形式插回原来的类中,保证从类的角度来看是不变的,但实际的实现会根据初始化甚至传入参数的不同来保证区别。...区别于简单的将相同的部分提取出来,策略模式的关键在于将相同的功能提取出来并抽象化,实际使用时通过使用者按需申请来保证可以动态获取。保证整体静态的同时,也满足了具体实现的动态性。

    23720

    策略模式

    1 概念 工厂模式是解耦对象的创建和使用,观察者模式是解耦观察者和被观察者。...策略模式跟两者类似,也能起到解耦的作用,不过,它==解耦的是策略的定义、创建、使用这三部分== 2 实现 这里实现一个计算订单价格的策略,商品可能会做各种活动,每种活动折扣都不一样,这里通过策略模式实现.../** * 使用工厂模式 创建策略 * * @Author: prepared * @Date: 2021/6/21 15:04 */ public class DiscountStrategyFactory...策略模式适用于根据不同类型的动态,决定使用哪种策略这样一种应用场景。 策略模式主要的作用还是解耦策略的定义、创建和使用,控制代码的复杂度,让每个部分都不至于过于复杂、代码量过多。...在这里使用策略模式,代码简洁,而且方便扩展其他策略,比如以后需要钉钉通知消息、用户精准广告等等测试。 否则每次增加需求的时候,都需要大规模修改原有代码,与设计原则【对扩展开放,对修改关闭】不符。

    14210

    策略模式

    策略模式 策略模式Strategy Pattern也称为政策模式Policy Pattern,其定义一系列算法,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,这种类型的设计模式属于行为型模式...状态模式是通过状态转移来改变Context所组合的State对象,而策略模式是通过Context本身的决策来改变组合的Strategy对象。...优点 策略模式提供了对开闭原则的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。 策略模式提供了管理相关的算法族的办法。...策略模式提供了可以替换继承关系的办法。 使用策略模式可以避免使用多重条件转移语句。 缺点 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。...策略模式将造成产生很多策略类,可以通过使用享元模式在一定程度上减少对象的数量。

    23430
    领券