Java 与设计模式:策略模式
【摘要】 Java 与设计模式:策略模式 介绍策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以互相替换,从而让算法独立于使用它的客户端而变化。 应用使用场景策略模式适用于以下场景:当你需要在运行时根据不同的条件选择不同的算法或行为时。当有许多类仅在行为上稍有不同的情况,通过使用策略模式可以避免过多的子类化。当一个类需要动态地改变其...
Java 与设计模式:策略模式
介绍
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以互相替换,从而让算法独立于使用它的客户端而变化。
应用使用场景
策略模式适用于以下场景:
- 当你需要在运行时根据不同的条件选择不同的算法或行为时。
- 当有许多类仅在行为上稍有不同的情况,通过使用策略模式可以避免过多的子类化。
- 当一个类需要动态地改变其行为时。
原理解释
策略模式包含三部分:
- 策略接口(Strategy):定义了算法族的公共接口,具体算法实现类需实现这个接口。
- 具体策略(ConcreteStrategy):实现了策略接口中的具体算法。
- 上下文(Context):持有一个策略接口的引用,并且可以将具体策略设置给这个引用。
通过这样分离,用户可以根据需要动态地切换具体策略,而无需修改客户端代码。
算法原理流程图
+--------------+
| Context |
| |
| + strategy |<-------------------+
| | |
+--+--------+--+ |
| | |
| | |
+--v--------v--+ +-----v-------+
| Strategy | | Concrete |
| Interface | | Strategy |
| | | A |
+--^--------^--+ +-------------+
| | |
| | |
+--v--------v--+ +-----v-------+
| Concrete | | Concrete |
| Strategy | | Strategy |
| B | | C |
+-------------+ +-------------+
算法原理解释
在策略模式中,Context
持有一个Strategy
接口的引用,可以在运行时通过设定不同的ConcreteStrategy
对象来改变其所采用的算法。各个ConcreteStrategy
实现了不同的算法,通过这样的方式使算法实现与使用算法的代码分离,使得代码更加灵活和可维护。
实际详细应用代码示例实现
策略接口
public interface Strategy {
int execute(int a, int b);
}
具体策略实现
public class AdditionStrategy implements Strategy {
@Override
public int execute(int a, int b) {
return a + b;
}
}
public class SubtractionStrategy implements Strategy {
@Override
public int execute(int a, int b) {
return a - b;
}
}
public class MultiplicationStrategy implements Strategy {
@Override
public int execute(int a, int b) {
return a * b;
}
}
上下文
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.execute(a, b);
}
}
测试代码
public class StrategyPatternDemo {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new AdditionStrategy());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
context.setStrategy(new SubtractionStrategy());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
context.setStrategy(new MultiplicationStrategy());
System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
}
}
部署场景
策略模式广泛用于开发系统中需要灵活切换算法的地方,例如支付方式选择、数据压缩算法的选择、各种排序算法的选择等。
材料链接
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma et al.
- Refactoring Guru: Strategy Pattern
总结
策略模式提供了一种在软件设计中处理算法家族的优雅方式,通过接口和具体实现的分离,实现了动态策略的配置和更好的扩展性。
未来展望
随着软件复杂性的增加和对灵活性的需求不断提升,策略模式的重要性将进一步显现。结合其他新兴技术,如面向对象的框架和语言特性(如Java 8的Lambda表达式),策略模式可以得到更为简洁和高效的实现。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)