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

策略模式Strategy

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

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

策略模式(strategy)

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

24810

策略模式Strategy

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

48890

策略模式(Strategy)

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

37620

策略模式(Strategy)

意图 策略模式是一种行为型模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。 问题 一天,你打算为游客们创建一款导游程序。...解决方案 策略模式建议找出负责用许多不同方式完成特定任务的类,然后将其中的算法抽取到一组被称为策略的独立类中。 名为上下文的原始类必须包含一个成员变量来存储对于每种策略的引用。..._strategy = strategy; } // Usually, the Context allows replacing a Strategy object at..._strategy = strategy; } // The Context delegates some work to the Strategy object instead...Context: Sorting data using the strategy (not sure how it'll do it) e,d,c,b,a 参考原文:策略设计模式

38610

策略模式(strategy pattern)

会有溢出效应 为了改进1问题,我们可以通过覆盖fly 方法来解决 => 覆盖解决 问题又来了,如果我们有一个玩具鸭子ToyDuck, 这样就需要ToyDuck去覆盖Duck的所有实现的方法 策略模式(strategy...pattern) 基本概念 策略模式Strategy Pattern)中,定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这算法体现了几个设计原则, 把变化的代码从不变的代码中分离出来...; 针对接口编程而不是具体类(定义了策略接口); 多用组合/聚合,少用继承(客户通过组合方式使用策略) 类图 说明 从上图可以看到,客户context 有成员变量strategy或者其他的策略接口,至于需要使用到哪个策略...策略模式的注意事项和细节 策略模式的关键是:分析项目中变化部分与不变部分 策略模式的核心思想是:多用组合/聚合 少用继承;用行为类组合,而不是行为的继承。...Strategy类中使得你可以独立于其Context改变它,使它易于切换、易于理解、易于扩展 需要注意的是:每添加一个策略就要增加一个类,当策略过多是会导致类数目庞大

11230

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

1.2K20

精读《设计模式 - 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 许可证)

23930

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

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

756140

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

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

39330

「聊设计模式」之策略模式Strategy

策略模式Strategy)是常用的设计模式之一,它提供了一种将算法家族(一组相同的算法)进行封装、动态切换的方法,从而能够根据不同条件选择不同的算法来解决问题。   ...模式概念   策略模式Strategy Pattern)是一种设计模式,它可以让算法独立于使用它的客户端而变化。在策略模式中,算法被封装成一系列的策略类,每个策略类都实现了同一个接口。...策略模式代码实现   在Java中,可以使用接口来定义抽象策略(Strategy)以及具体策略(ConcreteStrategy),然后使用一个Context类来包含需要处理的数据,并调用具体策略的方法来处理数据...strategy; public Context(Strategy strategy) { this.strategy = strategy; } public...Context类包含一个Strategy对象,并在执行策略时调用具体策略的doOperation方法。

35541

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

gayhub:https://github.com/Wasabi1234 0.0 相关源码链接 https://github.com/Wasabi1234/design-patterns 1 定义 也叫做政策模式...策略模式使用的就是面向对象的继承和多态机制 策略模式的三个角色 ● Context 封装角色 也叫做上下文角色,起承上启下封装作用; 屏蔽高层模块对策略、算法的直接访问,封装可能存在的变化. ● Strategy...那么这个时候就要用到策略模式了。简言之,策略模式就是为了应对对象中复杂多变的行为而产生的。...策略模式和工厂模式 行为型 接收已经创建好的对象,从而实现不同的行为 创造型 接收指令,创建出符合要求的具体对象 策略模式和状态模式 若系统中某个类的某个行为存在多种实现方式,客户端需要知道到底使用哪个策略...若系统中某个对象存在多种状态,不同状态下的行为又具有差异性,状态之间会自动转换,客户端不需要关心具体状态 6 实战 改造后的测试类 可见 if/else 语句过多,采取策略+工厂模式结合 策略工厂 [

57730

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

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

70131

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

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

42220

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

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

28620
领券