• 理解一下策略模式,工厂模式


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

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

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

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

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

    工厂放策略

    @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 {
    //省略
    }

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

  • 相关阅读:
    正则表达式的规则
    数组合并函数,二维数组相同字段合并到一起。
    mysql如果在使用多表连查时,两张或多张表出现相同的字段名的解决办法
    mysql多表查询方法(left join(左连接),right join (右连接),inner join (内连接)的区别)
    针对ueditor编译器发送数据后不能自动清空表单的问题
    mysql数据库分组查询小结
    ubuntu下命令详细小结
    STL 的运用 istringstream的运用
    odeforces Beta Round #77 (Div. 2 Only)
    位运算基础
  • 原文地址:https://www.cnblogs.com/ydymz/p/9214483.html
Copyright © 2020-2023  润新知