一、策略模式 概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式 在策略模式中,我们创建表示各种策略的对象和一个行为随
概述
在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为
策略模式一般用于各种算法上面
优缺点
优点:
算法可以自由切换
避免使用多重条件判断
扩展性良好
缺点:
策略类会增多
所有策略类都需要对外暴露
策略是一个接口,该接口定义若干个操作标识,即定义了若干个方法
上下文是依赖于接口的类(是面向策略设计的类,如下图 Context 类),即上下文包含用策略(接口)声明的变量(如下图的strategy成员变量)
上下文提供一个方法(如下图Context类中的的 executeStrategy() 方法),持有一个策略类的引用,最终给客户端调用。该方法委托策略变量调用具体策略所实现的策略接口中的方法(实现接口的类重写策略中的方法,来完成具体功能)
具体策略是实现策略接口的类(如下图的ConcreteStrategyA类和ConcreteStrategyB类)。具体策略实现策略接口所定义的方法,即给出操作标识的具体方法
角色分配
package com.vinjcent.pattern.strategy;public interface Strategy { int doOperation(int num1, int num2); }
package com.vinjcent.pattern.strategy;public class OperationAdd implements Strategy { @Override public int doOperation(int num1, int num2) { return num1 + num2; }}
package com.vinjcent.pattern.strategy;public class OperationSubtract implements Strategy { @Override public int doOperation(int num1, int num2) { return num1 - num2; }}
package com.vinjcent.pattern.strategy;public class OperationMultiply implements Strategy { @Override public int doOperation(int num1, int num2) { return num1 * num2; }}
package com.vinjcent.pattern.strategy;public class OperationDivision implements Strategy { @Override public int doOperation(int num1, int num2) { return num1 / num2; }}
package com.vinjcent.pattern.strategy;public class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public Strategy getStrategy() { return strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public int executeStrategy(int num1, int num2) { return strategy.doOperation(num1, num2); }}
package com.vinjcent.pattern.strategy;public class Main { 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 OperationSubtract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); // 乘法策略 context = new Context(new OperationMultiply()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); // 除法策略 context = new Context(new OperationDivision()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); }}
注意事项:
如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题
来源地址:https://blog.csdn.net/Wei_Naijia/article/details/129109925
--结束END--
本文标题: Java特性之设计模式【策略模式】
本文链接: https://www.lsjlt.com/news/431464.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0