• 策略模式、策略模式与工厂模式相结合


    1. 策略模式:其实就是一个类作为一系列类执行相同方法的东西
      1. package strategy;
      2. public class First {
      3. public static void main(String[] args) {
      4. Strategy strategy;
      5. String a = "";
      6. Context context = null;
      7. context = new Context(new ConcreteStrategyA());
      8. context.AlgorithmInterface();
      9. context = new Context(new ConcreteStrategyB());
      10. context.AlgorithmInterface();
      11. }
      12. }
      13. /**
      14. * 上下文类 用于创建
      15. */
      16. class Context {
      17. Strategy strategy;
      18. //获取
      19. public Context(Strategy strategy) {
      20. this.strategy = strategy;
      21. }
      22. //计算方式执行
      23. public void AlgorithmInterface() {
      24. this.strategy.AlgorithmInterface();
      25. }
      26. }
      27. /**
      28. * 算法类
      29. */
      30. abstract class Strategy {
      31. //计算方式
      32. public abstract void AlgorithmInterface();
      33. }
      34. /**
      35. * 算法A
      36. */
      37. class ConcreteStrategyA extends Strategy {
      38. //计算方式
      39. public void AlgorithmInterface() {
      40. //算法A实现
      41. }
      42. }
      43. /**
      44. * 算法B
      45. */
      46. class ConcreteStrategyB extends Strategy {
      47. //计算方式
      48. public void AlgorithmInterface() {
      49. //算法B实现
      50. }
      51. }

    2. 与简单工厂模式合用(在需要做选择的时候)
      1. package strategy;
      2. public class First {
      3. public static void main(String[] args) {
      4. Strategy strategy;
      5. String a = "";
      6. Context context = new Context(a);
      7. context.AlgorithmInterface();
      8. }
      9. }
      10. /**
      11. * 上下文类 用于创建
      12. */
      13. class Context {
      14. Strategy strategy;
      15. //获取
      16. public Context(String a) {
      17. switch (a) {
      18. case "1":
      19. strategy = new ConcreteStrategyA();
      20. break;
      21. case "2":
      22. strategy = new ConcreteStrategyB();
      23. break;
      24. }
      25. }
      26. //计算方式执行
      27. public void AlgorithmInterface() {
      28. this.strategy.AlgorithmInterface();
      29. }
      30. }
      31. /**
      32. * 算法类
      33. */
      34. abstract class Strategy {
      35. //计算方式
      36. public abstract void AlgorithmInterface();
      37. }
      38. /**
      39. * 算法A
      40. */
      41. class ConcreteStrategyA extends Strategy {
      42. //计算方式
      43. public void AlgorithmInterface() {
      44. //算法A实现
      45. }
      46. }
      47. /**
      48. * 算法B
      49. */
      50. class ConcreteStrategyB extends Strategy {
      51. //计算方式
      52. public void AlgorithmInterface() {
      53. //算法B实现
      54. }
      55. }

    3. 比简单工厂模式多出来的不同:
      1. 简单工厂模式关注的是对象,也就是new出来的一个工具
      2. 策略模式关注的是行为,粗俗点说就是,new出来一个行为
    4. 区分简单工厂模式和策略模式的使用场景:
      1. 当客户端关注的是行为而不是工具的时候选择策略模式,
      2. 如果关注的是工具,那么就是简单工厂模式,
      3. 怎么区别关注点呢,就是类的功能,
        1. 如果这个类只有单一的功能:比如之前的加减乘除类,只有运算的功能,而且是固定的两个数字的运算,那么就完全可以使用策略模式,因为客户端关注的就是计算结果,而不是你这个工具。
        2. 如果这个类有很多的功能:比如电脑,有很多功能,所以new的时候就需要new出一个工具,然后根据不同的情况执行不同的方法
    5. 总结:根本作用,就是让客户端可以少接触一个类。条件就是这个类,功能单一,不需要对对象再进行操作了,好比最近看的一本书圣女的救赎,死者对女性的关注点就是生孩子,这个时候他就可以使用策略模式找对象,关注点就是生孩子,不是女人。
  • 相关阅读:
    Vue 卸载Better Scroll插件
    真题集P115---2015年真题(以及 力扣54)
    阿里本地生活全域日志平台 Xlog 的思考与实践
    传统广电媒体为何选择上云?有何优势?
    ZCU102启动镜像(详细版)
    TL-BERT: A Novel Biomedical Relation Extraction Approach
    Windows 11 Beta 预览版用户已经可以体验 Android 应用
    深度学习人脸表情识别算法 - opencv python 机器视觉 计算机竞赛
    图的应用4.0-----关键路径(AOE网)
    talib库明明下载成功了,但是引用不成功是为什么
  • 原文地址:https://blog.csdn.net/xf552527/article/details/127784516