当前位置:   article > 正文

【设计模式】策略模式

【设计模式】策略模式

目录

什么是策略模式

代码实现


什么是策略模式

策略模式是一种行为型设计模式,它定义了一系列算法,将每个算法封装成一个独立的对象,使得它们可以相互替换。

在策略模式中,通常有三个角色:

  1. 环境类(Context): 它负责维护一个对策略对象的引用,并在需要时调用策略对象的方法。环境类通常提供一个方法来设置和修改当前所采用的策略。

  2. 抽象策略接口(Strategy): 它定义了一个算法的抽象接口,声明了算法的方法。

  3. 具体策略类(Concrete Strategy): 它实现了抽象策略接口,定义了具体的算法实现

策略模式的关键在于将算法封装成独立的策略对象,并使得这些策略对象可以相互替换。这样,客户端代码只需要与策略接口交互,而不需要关心具体的算法实现,从而实现了算法与客户端代码的解耦。

策略模式的优点包括:

  • 灵活性: 策略模式使得算法的变化独立于使用算法的客户端,客户端可以根据需要动态地选择和切换算法。
  • 复用性: 策略模式将算法封装成独立的策略对象,使得可以更容易地复用算法。
  • 扩展性: 策略模式可以很容易地新增新的算法,并且无需修改现有的客户端代码。

然而,策略模式也存在一些缺点,例如增加了类的数量和复杂性,以及需要客户端了解各种策略之间的差异和选择合适的策略等。

        下面我们使用java代码来实现一个策略模式,走你~~~

代码实现

  1. // 定义策略接口
  2. interface Strategy {
  3. int doOperation(int num1, int num2);
  4. }
  5. // 具体策略类:加法策略
  6. class AddStrategy implements Strategy {
  7. @Override
  8. public int doOperation(int num1, int num2) {
  9. return num1 + num2;
  10. }
  11. }
  12. // 具体策略类:减法策略
  13. class SubtractStrategy implements Strategy {
  14. @Override
  15. public int doOperation(int num1, int num2) {
  16. return num1 - num2;
  17. }
  18. }
  19. // 具体策略类:乘法策略
  20. class MultiplyStrategy implements Strategy {
  21. @Override
  22. public int doOperation(int num1, int num2) {
  23. return num1 * num2;
  24. }
  25. }
  26. // 环境类
  27. class Context {
  28. private Strategy strategy;
  29. public Context(Strategy strategy) {
  30. this.strategy = strategy;
  31. }
  32. public int executeStrategy(int num1, int num2) {
  33. return strategy.doOperation(num1, num2);
  34. }
  35. }
  36. // 客户端代码
  37. public class Client {
  38. public static void main(String[] args) {
  39. // 创建具体策略实例
  40. Strategy addStrategy = new AddStrategy();
  41. Strategy subtractStrategy = new SubtractStrategy();
  42. Strategy multiplyStrategy = new MultiplyStrategy();
  43. // 创建环境实例,并设置具体策略
  44. Context context = new Context(addStrategy);
  45. // 调用环境的方法执行具体策略
  46. int result1 = context.executeStrategy(10, 5);
  47. System.out.println("10 + 5 = " + result1);
  48. // 修改环境的策略为减法策略
  49. context = new Context(subtractStrategy);
  50. int result2 = context.executeStrategy(10, 5);
  51. System.out.println("10 - 5 = " + result2);
  52. // 修改环境的策略为乘法策略
  53. context = new Context(multiplyStrategy);
  54. int result3 = context.executeStrategy(10, 5);
  55. System.out.println("10 * 5 = " + result3);
  56. }
  57. }

 效果如图:

        非常的实用,喜欢的小伙伴可以动动你们发财的小手,给博主一个小小的点赞或者关注,就是对博主最大的鼓励,爱你们哦~~  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/472503
推荐阅读
相关标签
  

闽ICP备14008679号