策略模式 忘是亡心i 2021-09-16 23:00 430阅读 0赞 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 **意图:**定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 **主要解决:**在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。 **何时使用:**一个系统有许多许多类,而区分它们的只是他们直接的行为。 **如何解决:**将这些算法封装成一个一个的类,任意地替换。 **关键代码:**实现同一个接口。 demo中的UML图如下: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdfc2h1eXU_size_16_color_FFFFFF_t_70][] 具体代码实现,策略基类: /** * @author Shuyu.Wang * @package:com.shuyu.strategy * @className: * @description:策略模式通用接口 * @date 2018-11-08 16:31 **/ public interface Strategy { double operation(double a,double b ); } 相关实现类: /** * @author Shuyu.Wang * @package:com.shuyu.strategy * @description:加法实现类 * @date 2018-11-08 16:44 **/ public class OperationAdd implements Strategy{ @Override public double operation(double a, double b) { return a+b; } } /** * @author Shuyu.Wang * @package:com.shuyu.strategy * @description:乘法计算类 * @date 2018-11-08 16:47 **/ public class OperationMul implements Strategy{ @Override public double operation(double a, double b) { return a-b; } } /** * @author Shuyu.Wang * @package:com.shuyu.strategy * @description:减法类 * @date 2018-11-08 16:46 **/ public class OperationSub implements Strategy{ @Override public double operation(double a, double b) { return a-b; } } 结合上下文的Context: /** * @author Shuyu.Wang * @package:com.shuyu.strategy * @description: * @date 2018-11-08 17:10 **/ public class Context { Strategy strategy = null; public Context(Strategy strategy ) { this.strategy=strategy; } public double operation(double a,double b){ return strategy.operation(a, b); } } 测试类: @RunWith(SpringRunner.class) @SpringBootTest public class StrategyApplicationTests { @Test public void contextLoads() { Context context=new Context(new OperationAdd()); System.out.println(context.operation(10,5)); context=new Context(new OperationSub()); System.out.println(context.operation(10,5)); } } 运行结果如下: 15.0 5.0 git代码地址:[https://github.com/iot-wangshuyu/designpatterns/tree/master/strategy][https_github.com_iot-wangshuyu_designpatterns_tree_master_strategy] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdfc2h1eXU_size_16_color_FFFFFF_t_70]: /images/20210901/3351eb8d4a9e4d45b1c09e30a85ae95d.png [https_github.com_iot-wangshuyu_designpatterns_tree_master_strategy]: https://github.com/iot-wangshuyu/designpatterns/tree/master/strategy
相关 策略模式 1. 定义 > 定义一系列算法,把他们一个个封装起来,并且使他们可以互相替换。本模式使得算法 > 可以独立于使用它的客户而变化。 2. 策略模式的结构 ![策 川长思鸟来/ 2022年05月29日 04:09/ 0 赞/ 45 阅读
相关 策略模式 前言 1、面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同的属性和功能的对象的抽象集合才是类。 2、简单工厂也能解决问题,但是 港控/mmm°/ 2021年12月08日 16:21/ 0 赞/ 305 阅读
相关 策略模式 用了也不知道用了的典型。 就是接口存在的意义,意图和实现分离。 就好像1+1=2,实现了一个简单加法一样。。。 转载于:https://www.cnblogs.com/l 曾经终败给现在/ 2021年11月27日 06:14/ 0 赞/ 290 阅读
相关 策略模式 策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略 亦凉/ 2021年09月29日 15:56/ 0 赞/ 279 阅读
相关 策略模式 策略模式(Strategy):定义了一系列算法家族,将每种算法分别封装起来,使得各种算法之间可以互相替换。策略模式可以让算法的变化不影响使用算法的客户,符合开放- 桃扇骨/ 2021年09月22日 23:22/ 0 赞/ 260 阅读
相关 策略模式 13.策略模式 class Program { static void Main(string[] args) 本是古典 何须时尚/ 2021年09月17日 00:00/ 0 赞/ 392 阅读
相关 策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为 忘是亡心i/ 2021年09月16日 23:00/ 0 赞/ 431 阅读
相关 策略模式 策略模式 1. 模式动机 2. 模式定义 3. 模式结构 4. 时序图 5. 代码分析 6. 模式分析 7. 优点 8. 深碍√TFBOYSˉ_/ 2021年08月31日 02:47/ 0 赞/ 530 阅读
相关 策略模式 面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。 策略模式:定义了算法家族,分别封装起来,让它们之间... 灰太狼/ 2020年11月29日 04:23/ 0 赞/ 599 阅读
还没有评论,来说两句吧...