首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

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

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

    1.2K21编辑于 2022-09-23
  • 来自专栏nummy

    策略模式

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。简而言之,策略模式就是根据不同的策略,选择对应不同的算法。

    45920发布于 2018-08-27
  • 来自专栏从码农的全世界路过

    策略模式

    在工作中策略模式可以说是应用场景最多的一种设计模式了, 但大多数人却还停留在概念层, 不能实际应用. 本文就一起看下如何使用策略模式. 1 策略模式 策略模式是对算法的包装, 并将每个算法单独封装起来, 且能在一定条件下进行互换. 抽象策略或算法(Strategy): 这是一个抽象角色, 通常由一个接口或抽象类实现, 并给出所需的接口的定义或方法声明. 这时候就该策略模式登场了. transportation.getType())){ transportation.doSomething(); } } } 小结 策略模式的重心不是如何实现算法

    45310编辑于 2022-06-27
  • 来自专栏奔跑的蛙牛技术博客

    策略模式

    策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式策略模式中专门有一个对象封装算法,以便于在运行时调用不通算法 实现一个策略模式 对一组对象按照其相关字段进行排序 排序采用简单的插入排序 封装一个transtion对象去实现排序规则算法(仔细看transtion

    62420发布于 2019-01-07
  • 来自专栏mingmingcome’s cnblogs

    策略模式

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

    53020编辑于 2022-05-10
  • 来自专栏Howl同学的学习笔记

    策略模式

    策略模式(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去旅游——————策略算法为: 坐火车 说到底策略模式和装饰者模式还是有很大的相似性,都是通过包装来实现----装饰者模式

    59210发布于 2020-03-11
  • 来自专栏给永远比拿愉快

    策略模式

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

    87410发布于 2019-01-25
  • 来自专栏三太子敖丙

    策略模式

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

    71120发布于 2021-07-02
  • 来自专栏憧憬博客分享

    设计模式 | 策略模式

    说明 定义:将一组特定的行为和算法封装成类,以适应某些特定的上下文环境,并让它们可以相互替换,这种模式就是策略模式。 简而言之就是多种条件对应多种操作, 对应条件使用对应操作类, 这些操作类叫做策略。 那么有了这些策略, 我们还需要一个操作策略的, 不能光写if条件实例化不同类啊, 那么这个时候需要一个Context对象, 我们传递什么策略它来帮我们执行对应策略的方法, 策略方法也不是随便写的, 需要接口约束 Context(new WxPay()); $wxStraegy->genPayParams(); // 生成微信支付参数 $wxStraegy->callback(); // 微信回调做事 结束语 策略模式可以很大程度上解决耦合 ,算法可以随便改动,并不会影响到使用者,缺点也不是很大问题,使用者必须知道所有策略并选择对应策略策略类会逐步增多。

    53420发布于 2020-07-20
  • 来自专栏HUC思梦的java专栏

    设计模式--策略模式

    模拟鸭子项目: 不使用设计模式的方案: 传统继承方式如下: 鸭子超类: public abstract class Duck { public void Quack() { System.out.println 用策略模式来解决新需求 接口: public interface FlyBehavior { void fly();} public interface QuackBehavior = new GaGaQuackBehavior();  //实现了叫声接口的类(可以多个) } @Override public void display() {...} } 策略模式模式让行为算法的变化独立于算法的使用者。 经验:多用组合来实现设计。 更详细的解释参考:http://www.cnblogs.com/zuoxiaolong/p/pattern8.html

    53410发布于 2020-09-03
  • 来自专栏软件工程师Michael

    设计模式--策略模式

    策略模式是一种行为设计模式,它使您能够定义一系列算法,将它们封装起来,并根据需要在运行时轻松地切换它们。在策略模式中,算法被封装为单独的类,称为策略。 这些策略实现共同的接口或基类,并被传递给另一个类(称为上下文),该类维护对当前策略的引用。上下文可以使用策略执行其任务,同时在需要时切换策略。 下面是使用C#实现策略模式的实例代码:// 定义策略接口interface IStrategy{ int Execute(int a, int b);}// 实现不同的算法作为策略class AddStrategy ,`AddStrategy`和`MultiplyStrategy`是具体的策略实现。 `Context`类维护对当前策略的引用,并在执行任务时使用该策略。使用`SetStrategy`方法可以轻松切换策略

    41230编辑于 2023-07-27
  • 来自专栏技术之路

    设计模式策略模式

    今天说一下策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 换句话说策略模式,是指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法,比如吃东西的行为 策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。   看一下简单的代码实现 #region 策略模式 #region 抽象策略 public abstract class Stratety { public abstract } } #endregion static void Main(string[] args) { #region 策略模式 策略模式的优点:      1.提供了管理相关算法族的方法。      2.可以避免使用多重条件转移语句。     

    80570发布于 2018-01-31
  • 来自专栏呼延

    策略模式

    第一章主要是引导用户一步一步设计一个简单的系统,在系统的一步步优化过程中,使用了策略模式,来让系统变得更好. 文中举例是”鸭子应用”,在这里我会其中的”设计谜题”提到的冒险游戏来展开,一步步记录策略模式. 首先上一些理论性的东西. 定义 策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 这话听着又是很拗口,看完下面的例子就会明白了. 类图 ? 策略模式的优缺点 优点 提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。 提供了管理相关的算法族的办法。 策略模式将造成产生很多策略类 适用环境 在以下情况下可以使用策略模式: 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

    59920发布于 2019-07-01
  • 来自专栏软件开发 -- 分享 互助 成长

    策略模式

    一、策略模式的相关介绍 1、定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 2、举例:商场中卖商品有原件、打折和满m元就减n元多种策略,可以将它们封装起来,然后通过策略类让这些方法可以被客户端选择。 3、UML图: ? 4、所属类别:行为型 二、C++程序实现 1 // 策略模式.cpp : 定义控制台应用程序的入口点。 .acceptcash(money); 101 } 102 //用户程序 103 int _tmain(int argc, _TCHAR* argv[]) 104 { 105 //选择一种促销模式 106 int mode; 107 context *cc; 108 cout<<"请选择一种促销模式 1:无促销,2:打折促销,3返利促销"<<endl; 109

    68680发布于 2018-02-05
  • 来自专栏晏霖

    策略模式

    前言 策略设计模式难易程度应该是仅次于单例模式的,无论是实现起来还是从结构上看,都非常简单,他跟简单工厂都一部分思想类似,大家可以结合一下简单工厂来看策略模式,大家千万不要记混了哦。 正文 简述什么是策略模式:它定义一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用它的客户端应用而独立变化。 策略模式适用场景:策略模式适合解决当程序出现多个不同分支,而且每个分支的逻辑还比较复杂的场景。 举个例子:有一个业务要根据不同的类型选择不同的算法或者选择不同类型的支付方式,等等。 使用和阅读提示:并不是所有的策略模式都和本文案例一样,但不变的是思想,我们学设计模式学的就是思想。 /heroqiang/article/details/84843482 http://www.runoob.com/design-pattern/strategy-pattern.html 下面介绍策略模式都几个角色

    59330发布于 2019-06-26
  • 来自专栏JMCui

    策略模式.

    一、介绍         策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。 以下是一些优秀博文的总结:     策略模式的特点: 1、策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。 3、运行期间,策略模式在每一个时刻只能使用一个具体的策略实现对象,虽然可以动态地在不同的策略实现中切换,但是同时只能使用一个。     策略模式的优点: 1、策略模式提供了管理相关的算法族的办法。 策略模式的缺点: 1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道算法或行为的情况。 2、由于策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很不可观。

    53830发布于 2018-12-07
  • 来自专栏高爽的专栏

    策略模式

    概述 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。 UML 实现 Strategy.java,策略类,定义算法的公共接口。       double retur = context.getResult(money);      System.out.println("满200返100:" + retur);   }} 总结 策略模式和简单工厂模式的区别 不同点 1、   使用方式不同,工厂是静态的,策略的上下文是需要创建对象的; 2、   工厂产生的是对象,不同情况下产生不同的对象; 3、   策略产生的是策略,或者说是算法,不同情况下使用不同的算法。 结论 无论何种设计模式,都是基于面相对象的三大特性,即封装、继承、多态。

    66100发布于 2017-12-28
  • 来自专栏刘晓杰

    策略模式

    策略模式: 定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也称为政策模式(Policy)。 策略模式把对象本身和运算规则区分开来,其功能非常强大,因为这个设计模式本身的核心思想就是面向对象编程的多形性的思想。 当存在以下情况时使用Strategy模式 1)许多相关的类仅仅是行为有异。 当这些变体实现为一个算法的类层次时 ,可以使用策略模式。 3)算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。 2)在策略模式中,应当由客户端自己决定在什么情况下使用什么具体策略角色。 3)策略模式仅仅封装算法,提供新算法插入到已有系统中,以及老算法从系统中“退休”的方便,策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定。

    58020发布于 2019-02-21
  • 来自专栏生如夏花的个人博客

    策略模式

    策略模式 案例导入 需求:设计一款植物大战僵尸的游戏 现有两款僵尸,他们的属性如下 属性外观移动方式攻击普通僵尸普通朝着一个方向移动咬旗手僵尸普通+手持旗子朝着一个方向移动咬 设计出这两个僵尸类 这种属性简单的类很好实现 模式定义 定义了算法族,分别封装起来,让它们之间可以互相替换,此模式的变化独立于算法的使用者 实现 //移动 interface Moveable{ void move(); } //攻击 interface

    31410编辑于 2022-05-05
  • 来自专栏Czy‘s Blog

    策略模式

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

    65500发布于 2020-10-26
领券