策略模式 小灰灰 2020-06-13 05:38 625阅读 0赞 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。 ### 介绍 ### **意图**:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。 **主要解决**:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。 **何时使用**:一个系统有许多许多类,而区分它们的只是他们直接的行为。 **如何解决**:将这些算法封装成一个一个的类,任意地替换。 **关键代码**:实现同一个接口。 **应用实例** :1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。 **优点** :1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。 **缺点**: 1、策略类会增多。 2、所有策略类都需要对外暴露。 **使用场景** :1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。 **注意事项**:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。 ### 实现 ### 我们将创建一个定义活动的 *Strategy* 接口和实现了 *Strategy* 接口的实体策略类。*Context* 是一个使用了某种策略的类。 *StrategyPatternDemo*,我们的演示类使用 *Context* 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。 ![策略模式][format_png] #### 步骤 1 #### 创建一个接口。 *Strategy.java* public interface Strategy { int doOperation(int num1, int num2); } #### 步骤 2 #### 创建实现接口的实体类。 *OperationAdd.java* public class OperationAdd implements Strategy { @Override public int doOperation(int num1, int num2) { return num1 + num2; } } *OperationSubstract.java* public class OperationSubstract implements Strategy { @Override public int doOperation(int num1, int num2) { return num1 - num2; } } *OperationMultiply.java* public class OperationMultiply implements Strategy { @Override public int doOperation(int num1, int num2) { return num1 * num2; } } #### 步骤 3 #### 创建 *Context* 类。 *Context.java* public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public int executeStrategy(int num1, int num2){ return strategy.doOperation(num1, num2); } } #### 步骤 4 #### 使用 *Context* 来查看当它改变策略 *Strategy* 时的行为变化。 *StatePatternDemo.java* public class StrategyPatternDemo { public static void main(String[] args) { Context context = new Context(new OperationAdd()); System.out.println("10 + 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationSubstract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationMultiply()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); } } #### 步骤 5 #### 验证输出。 10 + 5 = 15 10 - 5 = 5 10 * 5 = 50 [format_png]: /images/1592026723707.jpg
相关 策略模式 package A\_Strategy; /\\ \ 策略模式 定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 \ 优点: 深藏阁楼爱情的钟/ 2022年07月12日 12:17/ 0 赞/ 133 阅读
相关 策略模式 1.策略模式概述 在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy 缺乏、安全感/ 2022年06月18日 05:18/ 0 赞/ 144 阅读
相关 策略模式 前言 1、面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同的属性和功能的对象的抽象集合才是类。 2、简单工厂也能解决问题,但是 港控/mmm°/ 2021年12月08日 16:21/ 0 赞/ 228 阅读
相关 策略模式 一、模式定义: 大话设计模式中程杰老师给出的定义是这样的:策略模式(Strategy),定义了算法家族,分别封装起来,让它们之间可以互相替换,从模式让算法的变化不会影响到使用 Myth丶恋晨/ 2021年09月26日 15:28/ 0 赞/ 251 阅读
相关 策略模式 13.策略模式 class Program { static void Main(string[] args) 本是古典 何须时尚/ 2021年09月17日 00:00/ 0 赞/ 326 阅读
相关 策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个行为 忘是亡心i/ 2021年09月16日 23:00/ 0 赞/ 346 阅读
相关 策略模式 策略模式 1. 模式动机 2. 模式定义 3. 模式结构 4. 时序图 5. 代码分析 6. 模式分析 7. 优点 8. 深碍√TFBOYSˉ_/ 2021年08月31日 02:47/ 0 赞/ 442 阅读
相关 策略模式 一 点睛 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 ![在这里插入图片描述][watermark_type_ 喜欢ヅ旅行/ 2021年07月24日 15:30/ 0 赞/ 249 阅读
相关 策略模式 策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 在策略模式中,我们创建表示各种策略的对象和一个... 小灰灰/ 2020年06月13日 05:38/ 0 赞/ 626 阅读
还没有评论,来说两句吧...