理解一下策略模式,工厂模式
一
开发遇到了一个工厂模式和策略模式合起来的代码,觉得真的是写的太好了,所以打算了解下这两个模式的区别。
二
策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。
工厂模式:多个类似的子类继承同一个父类,对其父类中的变量进行操作;工厂类负责判断、控制哪个子类被执行,而工厂类调用子类完成后,返回的结果是该子类的父类,该父类中的变量已经被操作过了,访问该父类,得到我们想要的结果。
四
那么看着上面的红字,代码实现的方式就很简单了。
策略模式:通过接口定义一系列方法,在根据不同的功能创建类,具体实现这个接口的方法。
工厂模式:通过定义一个父类,多个子类继承父类,常见的是子类构造方法对父类的属性进行操作,也有调用子类的方法对父类进行操作。
五
工厂放策略
@Service public class DrawStragetyFactory {private final Map<String, BaseStragety> strategyMap = new ConcurrentHashMap<>(); /** * BaseStragety 是所有策略类必须实现的接口,策略模式* 该构造方法会将所有实现 BaseStragety 的类放入工厂* */@Autowiredpublic 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 { //省略 }
工厂模式和策略模式结合起来,工厂只带入一个策略基类即可轻易实现工厂模式,这代码真的很好,就是我实力不行,不知道怎么说。。。
转载于:https://www.cnblogs.com/ydymz/p/9214483.html
理解一下策略模式,工厂模式相关推荐
- 策略模式+工厂模式(反射)+枚举代替 大量 if..else if..
实际项目中我们经常碰到需要使用if-else-if的分支判断这种情况. 这种写法带来一些弊端. 一旦分支多太多,逻辑复杂,会导致代码十分冗长,增加阅读难度. 如果需要增加或减少分支,需要改动if-el ...
- Java设计模式之策略模式+工厂模式+模板模式
Java设计模式之策略模式+工厂模式+模板模式 1.策略模式+工厂模式+模板模式 个人的理解:实际开发工程中,一些业务很复杂的逻辑使用很多的 if 或者 if···else 语句,不利于维护和扩展,为 ...
- 如何使用 Spring 实现策略模式+工厂模式
欢迎关注方志朋的博客,回复"666"获面试宝典 一.策略模式 策略模式定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换 1.策略模式主要角色 主要角色如下: 封装角色( ...
- 实践:使用Spring 原生注解来快速实现 策略模式 + 工厂模式
作者:Richard_Yi juejin.im/post/5db0e910518825648f2ef355 前言 这阵子在做项目组重构的工作,工作中的一部分就是就目前代码库中与企业交互的逻辑抽离出来, ...
- 理解设计模式中的工厂模式
在理解设计模式中的单例模式一文中介绍了创建型模式中最为简单的一种:单例模式,并推荐了几种可以在实际生产中使用的线程安全的形式.本文将继续介绍创建型模式中的工厂方法模式和抽象工厂模式,同样使用代码和类图 ...
- 常用设计模式-策略模式+工厂模式+模板模式(使用场景、解决方案)
在策略模式+工厂模式中,没有使用到模板模式,因为张三和李四的业务逻辑都是调用AAA方法,如果现在在增加一个方法,次方法只需要李四一人去实现BBB方法,此时张三的handel中就会报错,需要张三也去实现 ...
- 策略模式+工厂模式的组合使用
策略模式+工厂模式的组合使用 策略模式:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 个人感觉特别好用,当你在一段代码中,有很多的候选算法,你就可以用这个策略模式了,可以有效的取出 ...
- 创建型模式——工厂模式
一. 实验目的与要求 1.练习使用工厂模式.设计相关的模拟场景并进行实施,验证模式特性,掌握其优缺点. 2.实验结束后,对相关内容进行总结. 二.实验内容 1.模式应用场景说明 作为一个青年人,最好的 ...
- 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern。
设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. 文章目录 设计模式 ~ 创建型模式 ~ 工厂模式 ~ Factory Pattern. eg. 简单工厂模式. 结构. 优 ...
- 自定义注解(三)支付渠道:消除if-策略模式+工厂模式+单例模式
自定义支付注解=消除if:策略模式+工厂模式+单例模式 代码取景,知识来源于视频<云析学院[路飞老师]-一次学习终身受用-如何正确使用设计模式写出优雅的代码> 1.定义注解标签 PayCh ...
最新文章
- docker supervisor管理进程
- 研究生 论文写作【要注意的30个禁忌(总体问题、选题方面、摘要方面、研究方法方面、讨论与结果、结论方面)】
- 如何修复:There is no command installed for 7-zip archive files
- Matlab--m代码转C与C++代码)1(简单示例涉及到函数调用)
- sql替换部分字符串,sql替换字符串中的某个字符方法
- DCMTK3.6.5+cmake3.7.1+VS2017配置过程
- ssm+教务信息管理 毕业设计-附源码161124
- 六级病历对门诊电子病历系统功能要求的初步梳理
- 时序分析 27 - 时序预测 格兰杰因果关系(上) 理论知识
- 103000大写加零吗_金额大写前面要加零的有哪些
- 电脑重复文件扫描工具清理:Easy duplicate finder 5.10注册破解版
- 10827 - Maximum sum on a torus
- 名字作诗,让你的名片更具有趣味性和个性化
- outlook从服务器中恢复已删除项目,恢复邮箱中的已删除邮件:Exchange 2013 帮助 | Microsoft Docs...
- 自从被国家认定为新时代的农民工过后,国家又不让我 996 了.
- RISC-V指令集架构------RV32I基础整数指令集
- 运行cool edit时显示系统配置不正确
- alias linux 执行命令,Linux系统alias命令编写实现命令别名方法介绍
- yun mysql_yun 安装mysql
- 关于vscode安装包下载太慢解决方法(详解)
热门文章
- Tip:在使用AjaxControlTookit的控件时响应事件
- 阿里云前端周刊 - 第 15 期
- Android LayoutInflater 动态地添加删除View
- 多个帐户都用root 来登录 怎么看另一个用户使用的那些命令
- eclipse中help下默认没有Software Updates选项解决办法
- 股票涨跌停的买卖问题
- L1-064 估值一亿的AI核心代码 (20 分)-PAT 团体程序设计天梯赛 GPLT
- [Java] 蓝桥杯ALGO-118 算法训练 连续正整数的和
- 蓝桥杯 ADV-180 算法提高 陶陶摘苹果2
- 如何新建Outlook电子邮件规则实现邮件自动分类