zoukankan      html  css  js  c++  java
  • 理解一下策略模式,工厂模式

    开发遇到了一个工厂模式和策略模式合起来的代码,觉得真的是写的太好了,所以打算了解下这两个模式的区别。

    策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
    工厂模式:多个类似的子类继承同一个父类,对其父类中的变量进行操作;工厂类负责判断、控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了,访问该父类,得到我们想要的结果。

    那么看着上面的红字,代码实现的方式就很简单了。

    策略模式:通过接口定义一系列方法,在根据不同的功能创建类,具体实现这个接口的方法。

    工厂模式:通过定义一个父类,多个子类继承父类,常见的是子类构造方法对父类的属性进行操作,也有调用子类的方法对父类进行操作。

    工厂放策略

    @Service
    public class DrawStragetyFactory {
        private final Map<String, BaseStragety> strategyMap = new ConcurrentHashMap<>();
    /** 
     * BaseStragety 是所有策略类必须实现的接口,策略模式
     * 该构造方法会将所有实现   BaseStragety 的类放入工厂
     * */
        @Autowired
        public DrawStragetyFactory(Map<String, BaseStragety> stragetyMap){
            this.strategyMap.clear();
            stragetyMap.forEach((k,v) -> this.strategyMap.put(k,v));
        }
    
      
    }

    策略基类

    //这是空的,你也可以写点东西
    public interface BaseStragety {
    }

    工厂模式的实现

    /**
     * 默认发奖策略 继承了 抽象发奖策略
     * 抽象发奖策略 实现了 发奖策略接口
     * 发奖策略接口 继承了 策略基类
     */
    @Component("DefaultSendAwardStrategy")
    public class DefaultSendAwardStrategy extends AbstractSendAwardStrategy {
    //省略
    }

    工厂模式和策略模式结合起来,工厂只带入一个策略基类即可轻易实现工厂模式,这代码真的很好,就是我实力不行,不知道怎么说。。。

  • 相关阅读:
    Linux实战教学笔记16:磁盘原理
    Linux实战教学笔记15:用户管理初级(下)
    Linux实战教学笔记14:用户管理初级(上)
    Linux实战教学笔记13:定时任务补充
    Linux实战教学笔记12:linux三剑客之sed命令精讲
    Linux实战教学笔记11:linux定时任务
    Linux实战教学笔记10:正则表达式
    Linux实战教学笔记09:通配符
    Linux实战教学笔记08:Linux 文件的属性(下半部分)
    Linux实战教学笔记08:Linux 文件的属性(上半部分)
  • 原文地址:https://www.cnblogs.com/ydymz/p/9214483.html
Copyright © 2011-2022 走看看