展开

关键词

策略模式(Strategy)

策略模式(Strategy) 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 类图: ? 策略模式是把一个类中经常改变或者将来可能改变的部分提取出来作为一个接口,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。 strategy; //传入一个具体策略对象 public Context(Strategy strategy) { this.strategy =strategy; 总结 策略模式优点: 1.算法可以自由切换。 2.避免使用多重条件判断。 3.扩展性良好。 策略模式缺点: 1.策略类会增多。 2.所有策略类都需要对外暴露。 适用场景: 1.如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2.一个系统需要动态地在几种算法中选择一种。

23120

策略模式Strategy

策略模式Strategy) 策略模式Strategy)[Policy] 意图:定义一系列算法,把他们封装起来,并且使他们可以相互替换,使算法可以独立于使用它的客户而变化。 模式结构: ? 心得: 对对象(Context)的处理操作可能有很多方式,这些方式很多情况下是同一类的处理操作,区别仅仅是操作的具体内容的差别。 这里涉及Context类和Strategy交互的问题,Context需要Strategy提供的算法进行计算,那么源数据如何告知Strategy类就有两种方式:一种是通过参数传递,直接将数据传参到Strategy 的接口algorithmInteface即可,另一种是直接传递Strategy对象的指针,并提供公共的访问接口contextInterface来提供数据来源。 ; virtual ~Strategy(){} }; class UpStrategy:public Strategy { public: virtual bool algorithmInterface

28090
  • 广告
    关闭

    腾讯云开发者社区系列公开课上线啦!

    Vite学习指南,基于腾讯云Webify部署项目。

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

    策略(Strategy模式

    策略(Strategy) Intent 定义一系列算法,封装每个算法,并使它们可以互换。 策略模式可以让算法独立于使用它的客户端。 Class Diagram Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy) 方法可以动态地改变 strategy 对象,也就是说能动态地改变 与状态模式的比较 状态模式的类图和策略模式类似,并且都是能够动态改变对象的行为。 但是状态模式是通过状态转移来改变 Context 所组合的 State 对象,而策略模式是通过 Context 本身的决策来改变组合的 Strategy 对象。

    5620

    策略模式(strategy)

    视频地址 http://www.imooc.com/video/3213 策略模式 : 将可变的部分 从程序中抽象分离成算法接口在该接口下分别封装一系列的算法实现 并使他们可以相互等候,从而导致客户端程序独立于算法的改变 不变更代码架构 通过开发与重构 拥抱需求的变化 使用策略模式 虚拟应用: 鸭子应用 飞行的能力 更多鸭子类型 每六个月发布一款产品 原有功能 鸭子的鸣叫功能 鸭子的显示功能 需求: 加入飞行能力 原有项目 flyingStragety; } public void fly(){ flyingStragety.performFly(); } 优点: 足够灵活 复用代码,更易于维护 缺点: 策略模式中的设计原则 策略模式的实现: (1) 通过分离变化得出的策略接口Strategy (2) Strategy的实现类 (3) 客户程序”有一个”Stategy (4) 客户程序中选择/组装正确的Strategy

    7910

    策略模式Strategy

    模式的定义 假设现在要实现一个简化的报价管理,实现如下的功能: 1. 对于普通客户或者新客户报全价 2. 对于老客户报的价格,统一折扣5% 3. 策略模式的定义: 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,使得算法可独立于使用它的客户而变化 2. UML图 ? Strategy:策略接口,用来约束一系列具体的策略算法,Context使用这个接口来调用具体的策略实现定义的算法 ConcreteStrategy:具体的策略实现,也就是具体的算法实现 Context 研磨设计模式 1)策略模式的功能:把具体的算法实现从具体业务处理中独立出来,把它们实现成为单独的算法类,从而形成一系列的算法,并让这些算法可以相互替换 2)Context和Strategy的关系 策略实现对象也可以从上下文获取所需要的数据 3) 容错恢复机制 比如说采用策略模式,把日志记录到数据库和把日志记录到文件当做两种记录日志的策略,然后再运行期间根据需要进行动态的切换 4)策略模式结合模板方法模式 发现一系列的算法的实现上存在公共功能

    21320

    【设计模式】—— 策略模式Strategy

    模式意图   定义一系列的算法,把他们封装起来,使得算法独立于适用对象。   比如,一个系统有很多的排序算法,但是使用哪个排序算法是客户对象的自有。 模式结构 ?    Context 环境角色的,策略的调用者 class Context{ private Strategy strategy; public Strategy getStrategy() { return strategy; } public void setStrategy(Strategy strategy) { this.strategy (Strategy strategy) { this.strategy = strategy; } public void operation(){ strategy.action

    274100

    策略模式 Strategy Pattern

    Strategy Pattern,是 Java 常用的设计模式之一。它提供了一个类的行为或其算法在运行时可以更改的能力。 它的结构 环境角色,持有一个策略引用。 = new PublicSaleStrategy(); CarShop car = new CarShop(strategy); car.getPrice(); strategy = new SuperSaleStrategy(); car = new CarShop(strategy); car.getPrice(); strategy = new BossStrategy(); car = new CarShop(strategy); car.getPrice(); } } 运行结果 总结 策略模式改变的是行为,在实际开发中经常会遇到类似的实现。例如,Jedis 的单机、线程池与集群模式

    16120

    设计模式- 策略模式(Strategy Pattern)

    Context(Strategy strategy) { _strategy = strategy; } public void UploadFile Context使用这个接口来调用某个*Strategy定义的算法。 *Strategy 具体策略: 实现Strategy接口中的具体算法。 Context 上下文: 通过一个*Strategy对象来对其进行配置;维护一个对Strategy对象的引用;可定义一个接口来让Strategy访问它的数据。 此时,使用策略模式,把这些行为转移到相应的具体策略类里面,可以避免使用难以维护的多重条件选择语句。 策略模式优点: 策略模式恰当使用继承可以把公共的代码移到父类里面,从而避免重复的代码。 使用策略模式可以避免使用多重条件判断语句。 策略模式缺点: 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。策略模式只适用于客户端知道所有的算法或行为的情况。 策略模式造成很多的策略类。

    21430

    Java策略模式(Strategy)

    策略模式(Strategy) 一.不使用策略模式 使用场景: 某个市场人员接到单后的报价策略(CRM系统中常见问题)。 二.使用策略模式   上面的案例就非常适合使用策略模式。策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新的算法。 2.案例实现 Strategy接口 public interface Strategy { public double getPrice(double standardPrice); } 四种算法实现 /可以通过构造器来注入 public Context(Strategy strategy) { super(); this.strategy = strategy; } //可以通过set 方法来注入 public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void pringPrice

    80220

    设计模式之策略模式(Strategy)

    策略模式: 策略模式属于对象行为模式[GOF95]。其用意是针对一组算法,将每一个算法封装到具体共同缄口的独立的类中,从来是的他们可以相互替换。 引进策略模式     策略模式是对算法的包装,是把使用算法的责任和算法本身分割开,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。  strategy;              public void contextInterface()         {             strategy.strategyInterface System.Collections.Generic; using System.Text; namespace StrategyPattern {     public abstract class Strategy 这时候,就应当把这些公有的行为放到共同的抽象策略角色Strategy类里面。

    521140

    精读《设计模式 - Strategy 策略模式

    Strategy(策略模式Strategy(策略模式)属于行为型模式。 意图:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法可以独立于使用它的客户而变化。 结构图 Strategy: 策略公共接口。 ConcreteStrategy: 具体策略,实现了上面这个接口。 只要你的策略符合接口,就满足策略模式的条件。 interface Strategy { doSomething: () => void } class Strategy1 implements Strategy { doSomething : () => { console.log('实现方案1') } } class Strategy2 implements Strategy { doSomething: () => 讨论地址是:精读《设计模式 - Strategy 策略模式》· Issue #304 · dt-fe/weekly 版权声明:自由转载-非商用-非衍生-保持署名(创意共享 3.0 许可证)

    6930

    9.设计模式--策略模式(Strategy模式)

    1.定义 策略模式是一种行为型模型,三国演义中有这样一个桥段,刘备被周瑜设计引到江东,周瑜想让刘备入赘,然后威胁关张赵以及诸葛让出荆州,不料诸葛孔明早有准备,准备了三个锦囊给赵云在需要时候以此打开锦囊 3.策略模式实现 InterfaceStrategy接口定义锦囊的行为,其中operate方法就是每个锦囊都应该具备的方法,即对应的妙计。 策略模式优缺点 优点: 1、策略模式符合开闭原则。 2、避免使用多重条件转移语句,如if...else...语句、switch 语句 3、使用策略模式可以提高算法的保密性和安全性。 参考文献《设计模式之禅》

    8410

    4.设计模式-策略模式(Strategy)

    strategy介绍 主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。 意图:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。 该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。 如何解决:将这些算法封装成一个一个的类,通过工厂来实现任意地替换。 优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 在不使用策略模式之前是这样写的: //支付方式 enum PayMode { AliPay, WeChatPay , JDPay }; class Payment 所以可以使用策略模式来将这些复杂的逻辑判断分成一个个单独的类,实现同一个接口或者继承于同一个父类. 写法如下所示: ?

    18320

    Strategy Pattern(策略模式)- note

    Strategy Pattern enables selecting an algorithm at runtime.In more detail, code receives run-time instructions 策略模式:使得具有共性的一组算法独立于调用方。 算法的组合场所 己方球员 ===》 算法的调用者 对方球员 ===》 客户端的不同请求 设计原则: 面向接口编程而非面向实现; 使用组合而非继承; 在系统之中找到一组具有共性的变化,将其独立出来; 好处: 在策略模式中 > 射击方式:手动单点射击 AWP产地信息: Made in UK(United Kingdom) */ 参考链接: https://www.runoob.com/w3cnote/state-vs-strategy.html https://zh.wikipedia.org/wiki/精密國際AWP狙擊步槍 https://en.wikipedia.org/wiki/Strategy_pattern

    25410

    设计模式实战-策略模式(Strategy Pattern)

    https://github.com/Wasabi1234 0.0 相关源码链接 https://github.com/Wasabi1234/design-patterns 1 定义 [1240] 也叫做政策模式 [策略模式的通用类图] 策略模式使用的就是面向对象的继承和多态机制 策略模式的三个角色 ● Context 封装角色 也叫做上下文角色,起承上启下封装作用; 屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化 . ● Strategy抽象策略角色 策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性 ● ConcreteStrategy具体策略角色 实现抽象策略中的操作,含有具体的算法 通用源码 那么这个时候就要用到策略模式了。简言之,策略模式就是为了应对对象中复杂多变的行为而产生的。 策略模式和工厂模式 行为型 接收已经创建好的对象,从而实现不同的行为 创造型 接收指令,创建出符合要求的具体对象 策略模式和状态模式 若系统中某个类的某个行为存在多种实现方式,客户端需要知道到底使用哪个策略

    41130

    设计模式实战-策略模式(Strategy Pattern)

    也叫做政策模式(Policy Pattern) 维基百科 对象有某个行为,但是在不同的场景中,该行为有不同的实现算法. 策略模式的通用类图 策略模式使用的就是面向对象的继承和多态机制 策略模式的三个角色 ● Context 封装角色 也叫做上下文角色,起承上启下封装作用; 屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化 . ● Strategy抽象策略角色 策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性 ● ConcreteStrategy具体策略角色 实现抽象策略中的操作,含有具体的算法 那么这个时候就要用到策略模式了。简言之,策略模式就是为了应对对象中复杂多变的行为而产生的。 策略模式和工厂模式 行为型 接收已经创建好的对象,从而实现不同的行为 创造型 接收指令,创建出符合要求的具体对象 策略模式和状态模式 若系统中某个类的某个行为存在多种实现方式,客户端需要知道到底使用哪个策略

    39231

    设计模式 (一)——策略模式Strategy,行为型)

    1.概述 使用设计模式可以提高代码的可复用性、可扩充性和可维护性。 策略模式Strategy Pattern)属于行为型模式,其做法是将类所需的行为或者算法一个个封装成单独的类,并将其作为类的数据成员,使得类的行为可以在不改变类设计的情况下灵活变化。 2.实例 上面对策略模式的概述难免显得抽象,难于理解,下面给出实例,让我们在实际应用中感受策略模式的做法和作用。 组合可以用在许多设计模式中,有优点,但也有缺点。 (4)策略模式:定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

    21020

    浅谈JAVA设计模式之——策略模式Strategy

    模式使得算法可独立于使用它的客户而变化。 二、适用性 许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为来配置一个类的方法。 需要使用一个算法的不同变体。 可使用策略模式以避免暴露复杂的、与算法相关的数据结构。 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。 将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。 三、参与者 Strategy 定义所有支持的算法的公共接口。 ConcreteStrategy 以Strategy接口实现某具体算法。 Context 用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。 五、示例 Strategy package com.lyz.design.strategy; /** * Strategy * @author binghe * */ public abstract

    12810

    实战设计模式系列-Strategy(策略)

    上面的实现就是“策略模式”,策略模式是一种行为模式,主要是把定义一系列的算法,并封装到算法类中,通过把策略独立出来,通过继承的方式实例化多个策略,在客户类中维护一个指向策略父类的引用,在运行时即可动态改变引用指向的子策略从而实现我们的需求

    13110

    Java常用设计模式--策略模式Strategy Pattern)

    简介 在策略模式Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 策略模式角色 环境(Context)角色:持有一个Strategy的引用,最终给客户端调用。 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。 示例代码 package com.example.strategy; public interface Member { void show(); } package com.example.strategy 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重转移语句里面,比使用继承的办法还要原始和落后。

    14520

    相关产品

    • 共享带宽包

      共享带宽包

      共享带宽包(BWP)是一种多IP聚合的计费模式 ,可大幅降低公网费用 。共享带宽包提供包月带宽 ,月 TOP5 消峰计费 ,月 95 消峰计费等多种计费模式 ,满足您不同业务场景。合理配置共享带宽包可帮您大幅降低公网费用 ,优化业务成本。

    相关资讯

    热门标签

    扫码关注腾讯云开发者

    领取腾讯云代金券