专栏首页lgp20151222理解一下策略模式,工厂模式

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

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

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

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

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

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

工厂放策略

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重新设置Eclipse的workspace路径

    1. 启动Eclipse/MyEclipse后, 打开"Window -> Preferences -> General -> Startup and Shut...

    ydymz
  • $.ajax()方法参数详解

    type: 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器...

    ydymz
  • Eclipse 一直不停 building workspace完美解决总结

    一、产生这个问题的原因多种 1、自动升级 2、未正确关闭  3、maven下载lib挂起 等..

    ydymz
  • 原 linux中goldendict发声词

    斯武丶风晴
  • SpringBoot 构建 REST 服务

    启动项目后浏览器打开http://localhost:8080/,可以看到如下信息:

    Johnson木木
  • XenDesktop 策略跨站点迁移

    最近做了一次XenDesktop的整体升级,期间考虑到原有架构的不稳定性,采取了新建XD Site方式,将原有桌面全部迁移到新Site后,原有配置的诸多XD策略...

    SuperDream
  • 覆盖4.6亿+设备量,腾讯Hardcoder框架正式开源

    ? Hardcoder 的诞生 随着微信越来越复杂,性能优化变得越来越难做,优化所带来的效果提升也越来越不明显。所以我们一直在思考,该如何突破这个优化的极限?...

    腾讯开源
  • activiti 自定义函数解析juel表达式

    activiti是支持juel表达式的,这个也很好用,但实际过程中需要支持类方法及变量。    原来项目中解析juel,这边有自定义一个方法的 代码如下:

    星痕
  • kubernetes常用控制器之StatefulSet

    实例之间的不等关系以及实例对外数据有依赖关系的应用,就被称为"有状态应用"。 所谓实例之间的不等关系即对分布式应用来说,各实例,各应用之间往往有比较大的依赖关系...

    极客运维圈

扫码关注云+社区

领取腾讯云代金券