工厂/Builder,桥接/策略
1.工厂 vs 抽象工厂
工厂方法模式: 用来加工、生产对象的类。比如说我想要一个汽车类,但是我总不能现场给你造个车出来对吧?于是我找到工厂类,然后工厂帮我把发动机型号选好,轮胎装好,油漆喷好,然后把车给我去做其他跟车相关的具体操作。
抽象工厂类,可以派生出多个具体工厂类。 还是上面那个例子,造车的步骤确定好了,先选发动机,再装轮胎,最后喷漆。但是家用车、商务车和跑车虽然都是车,这三个方面肯定不能一样啊(跑车的漆也应该更张扬一些),于是抽象一个造车工厂,具体的造家用车、商务车和跑车的类可以在此基础上派生。
2.抽象工厂 vs builder模式
抽象工厂上面说过了,主要说说builder。
builder其实跟工厂很像,只不过是一步步很清晰的。你可能说,今天我这个造家用车的想给车漆换个颜色,那么用builder模式只要改一下喷漆那部分调用的函数就行了。
3.桥接模式 vs 策略模式
桥接模式其实是种节省时间的操作。我们上面说造家用车和跑车,是两个不相干的工厂各干各的,各喷各的漆,那我可不可以不这样浪费资源,而是先专门弄一个工厂来喷漆,不管什么车,反正就是喷。于是造能动的车(没颜色)和让这台车变好看(有颜色)之间就架起了一座桥。
策略模式我们实验中经常用,主要是用来方便选择实现一个功能的具体方法的。比方说我今天造车,喷漆用上了哑光的工艺,但是过几天我发现不行,这工艺出来的东西不受欢迎,于是我就赶紧换成了事先就准备好的珠光工艺。注意,这里事先准备好其实是很重要的,能区别于builder的一点,你可能会说builder也能改喷漆,但人家那是重做,而策略是我开始做之前就有很多选择,我只不过可以方便地在这几个策略之间切换罢了。
工厂/Builder,桥接/策略的更多相关文章
- ES6对抽象工厂模式与策略模式结合的实践
这段代码是我在学习了java版的抽象工厂模式后,实现的ES6版抽象工厂,后期大幅修改,加入了策略模式,看起来很多逻辑看似繁琐,不必要写这么多,但是为了练习设计模式,所以才这样做.当所需的工厂种类增多后 ...
- 简单工厂模式和策略模式结合使用php
策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成. 结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象.修改策略模式的配置类即可. 在之前策略模式基础上, ...
- PHP中工厂模式与策略模式区别
策略模式需要自己动手去做,工厂模式是都准备好了你需要选择 工厂模式:有一天你决定去吃披萨,一看菜单,哦,种类很多呀,你就点了个培根披萨,过了二十分钟,你的披萨就来了就可以吃到了.但这个披萨是怎么做的, ...
- 用工厂模式和策略模式优化过多的if-else
多个if-else代码: @RunWith(SpringRunner.class) @SpringBootTest public class EducationalBackgroundTest { p ...
- Java设计模式思想(单列模式,工厂模式,策略模式)
a) 单例模式:单例模式核心只需要new一个实例对象的模式,比如数据库连接,在线人数等,一些网站上看到的在线人数统计就是通过单例模式实现的,把一个计时器存放在数据库或者内存中,当有人登陆的时候取出来加 ...
- 代码重构:用工厂+策略模式优化冗余的if else代码块
最近在工作中优化了一段冗余的if else代码块,感觉对设计模式的理解和运用很有帮助,所以分享出来.鉴于原代码会涉及到公司的隐私,因此就不贴出来了.下面以更加通俗易懂的案例来解析. 假如写一个针对员工 ...
- 商场促销-策略模式(和简单工厂模式很像的哇) C#
还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 废话不多说,直接进入正题: 首先按照大话设计模式的解释,在这里也总结下策略模式 ...
- 代码重构:用工厂+策略模式优化过多的if else代码块
最近在工作中优化了一段冗余的if else代码块,感觉对设计模式的理解和运用很有帮助,所以分享出来.鉴于原代码会涉及到公司的隐私,因此就不贴出来了.下面以更加通俗易懂的案例来解析. 假如写一个针对员工 ...
- 简单工厂模式&策略模式-简介与区别
不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过 ...
随机推荐
- Django Mysql数据库-聚合查询与分组查询
一.聚合查询与分组查询(很重要!!!) 聚合查询:aggregate(*args, **kwargs),只对一个组进行聚合 from django.db.models import Avg,Sum,C ...
- 第一次接触Linux
一:文件目录操作命令 (一)创建文件 vim 文件名 按i进入插入模式 写完文件后,先按Esc, 再输入 :w ...
- case when多条件
SELECT label ,label3 ,lon_cen ,lat_cen ,lon3 ,lat3 ,antenna_height ,horizontal_angle ,CASE WHEN roun ...
- 目标检测YOLO进化史之yolov1
yolov3在目标检测领域可以算得上是state-of-art级别的了,在实时性和准确性上都有很好的保证.yolo也不是一开始就达到了这么好的效果,本身也是经历了不断地演进的. yolov1 测试图片 ...
- mybatis对象的插入
或者: 传入JAVA对象 mapper接口代码: public int findUserList(User user); xml代码: <select id="findUserList ...
- JS中的分支结构
if语句 语法: if (expression1) { } else if (expression2) { } else { } 执行机制: 先对expression1做判定,如果为真,执行对应的代码 ...
- 【解决】TLS/SSLError问题导致无法使用pip或conda安装软件包
Copy these files from the ./Library/bin to ./DLLs/ :libcrypto-1_1-x64.*libssl-1_1-x64.* 解决 欢迎关注↓↓↓ 头 ...
- HDU 5135(再思考)
题意略. 思路:再思考后发现,为了构造出最大的三角形面积和,我们应该尽量让长的棍子相组合,这样构造出的三角形面积和最大,贪心能解. #include<bits/stdc++.h> usin ...
- 可以穿梭时空的实时计算框架——Flink对时间的处理
Flink对于流处理架构的意义十分重要,Kafka让消息具有了持久化的能力,而处理数据,甚至穿越时间的能力都要靠Flink来完成. 在Streaming-大数据的未来一文中我们知道,对于流式处理最重要 ...
- hdu 5495 LCS(并查集)
Problem Description You are given two sequence {a1,a2,...,an} and {b1,b2,...,bn}. Both sequences are ...