赞
踩
目录
策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装成一个独立的对象,使得它们可以相互替换。
在策略模式中,通常有三个角色:
环境类(Context): 它负责维护一个对策略对象的引用,并在需要时调用策略对象的方法。环境类通常提供一个方法来设置和修改当前所采用的策略。
抽象策略接口(Strategy): 它定义了一个算法的抽象接口,声明了算法的方法。
具体策略类(Concrete Strategy): 它实现了抽象策略接口,定义了具体的算法实现。
策略模式的关键在于将算法封装成独立的策略对象,并使得这些策略对象可以相互替换。这样,客户端代码只需要与策略接口交互,而不需要关心具体的算法实现,从而实现了算法与客户端代码的解耦。
策略模式的优点包括:
然而,策略模式也存在一些缺点,例如增加了类的数量和复杂性,以及需要客户端了解各种策略之间的差异和选择合适的策略等。
下面我们使用java代码来实现一个策略模式,走你~~~
- // 定义策略接口
- interface Strategy {
- int doOperation(int num1, int num2);
- }
-
- // 具体策略类:加法策略
- class AddStrategy implements Strategy {
- @Override
- public int doOperation(int num1, int num2) {
- return num1 + num2;
- }
- }
-
- // 具体策略类:减法策略
- class SubtractStrategy implements Strategy {
- @Override
- public int doOperation(int num1, int num2) {
- return num1 - num2;
- }
- }
-
- // 具体策略类:乘法策略
- class MultiplyStrategy implements Strategy {
- @Override
- public int doOperation(int num1, int num2) {
- return num1 * num2;
- }
- }
-
- // 环境类
- class Context {
- private Strategy strategy;
-
- public Context(Strategy strategy) {
- this.strategy = strategy;
- }
-
- public int executeStrategy(int num1, int num2) {
- return strategy.doOperation(num1, num2);
- }
- }
-
- // 客户端代码
- public class Client {
- public static void main(String[] args) {
- // 创建具体策略实例
- Strategy addStrategy = new AddStrategy();
- Strategy subtractStrategy = new SubtractStrategy();
- Strategy multiplyStrategy = new MultiplyStrategy();
-
- // 创建环境实例,并设置具体策略
- Context context = new Context(addStrategy);
-
- // 调用环境的方法执行具体策略
- int result1 = context.executeStrategy(10, 5);
- System.out.println("10 + 5 = " + result1);
-
- // 修改环境的策略为减法策略
- context = new Context(subtractStrategy);
- int result2 = context.executeStrategy(10, 5);
- System.out.println("10 - 5 = " + result2);
-
- // 修改环境的策略为乘法策略
- context = new Context(multiplyStrategy);
- int result3 = context.executeStrategy(10, 5);
- System.out.println("10 * 5 = " + result3);
- }
- }
效果如图:
非常的实用,喜欢的小伙伴可以动动你们发财的小手,给博主一个小小的点赞或者关注,就是对博主最大的鼓励,爱你们哦~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。