1.工厂 vs 抽象工厂

工厂方法模式: 用来加工、生产对象的类。比如说我想要一个汽车类,但是我总不能现场给你造个车出来对吧?于是我找到工厂类,然后工厂帮我把发动机型号选好,轮胎装好,油漆喷好,然后把车给我去做其他跟车相关的具体操作。

抽象工厂类,可以派生出多个具体工厂类。 还是上面那个例子,造车的步骤确定好了,先选发动机,再装轮胎,最后喷漆。但是家用车、商务车和跑车虽然都是车,这三个方面肯定不能一样啊(跑车的漆也应该更张扬一些),于是抽象一个造车工厂,具体的造家用车、商务车和跑车的类可以在此基础上派生。

2.抽象工厂 vs builder模式

抽象工厂上面说过了,主要说说builder。

builder其实跟工厂很像,只不过是一步步很清晰的。你可能说,今天我这个造家用车的想给车漆换个颜色,那么用builder模式只要改一下喷漆那部分调用的函数就行了。

3.桥接模式 vs 策略模式

桥接模式其实是种节省时间的操作。我们上面说造家用车和跑车,是两个不相干的工厂各干各的,各喷各的漆,那我可不可以不这样浪费资源,而是先专门弄一个工厂来喷漆,不管什么车,反正就是喷。于是造能动的车(没颜色)和让这台车变好看(有颜色)之间就架起了一座桥。

策略模式我们实验中经常用,主要是用来方便选择实现一个功能的具体方法的。比方说我今天造车,喷漆用上了哑光的工艺,但是过几天我发现不行,这工艺出来的东西不受欢迎,于是我就赶紧换成了事先就准备好的珠光工艺。注意,这里事先准备好其实是很重要的,能区别于builder的一点,你可能会说builder也能改喷漆,但人家那是重做,而策略是我开始做之前就有很多选择,我只不过可以方便地在这几个策略之间切换罢了。

工厂/Builder,桥接/策略的更多相关文章

  1. ES6对抽象工厂模式与策略模式结合的实践

    这段代码是我在学习了java版的抽象工厂模式后,实现的ES6版抽象工厂,后期大幅修改,加入了策略模式,看起来很多逻辑看似繁琐,不必要写这么多,但是为了练习设计模式,所以才这样做.当所需的工厂种类增多后 ...

  2. 简单工厂模式和策略模式结合使用php

    策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成. 结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象.修改策略模式的配置类即可. 在之前策略模式基础上, ...

  3. PHP中工厂模式与策略模式区别

    策略模式需要自己动手去做,工厂模式是都准备好了你需要选择 工厂模式:有一天你决定去吃披萨,一看菜单,哦,种类很多呀,你就点了个培根披萨,过了二十分钟,你的披萨就来了就可以吃到了.但这个披萨是怎么做的, ...

  4. 用工厂模式和策略模式优化过多的if-else

    多个if-else代码: @RunWith(SpringRunner.class) @SpringBootTest public class EducationalBackgroundTest { p ...

  5. Java设计模式思想(单列模式,工厂模式,策略模式)

    a) 单例模式:单例模式核心只需要new一个实例对象的模式,比如数据库连接,在线人数等,一些网站上看到的在线人数统计就是通过单例模式实现的,把一个计时器存放在数据库或者内存中,当有人登陆的时候取出来加 ...

  6. 代码重构:用工厂+策略模式优化冗余的if else代码块

    最近在工作中优化了一段冗余的if else代码块,感觉对设计模式的理解和运用很有帮助,所以分享出来.鉴于原代码会涉及到公司的隐私,因此就不贴出来了.下面以更加通俗易懂的案例来解析. 假如写一个针对员工 ...

  7. 商场促销-策略模式(和简单工厂模式很像的哇) C#

    还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 废话不多说,直接进入正题: 首先按照大话设计模式的解释,在这里也总结下策略模式 ...

  8. 代码重构:用工厂+策略模式优化过多的if else代码块

    最近在工作中优化了一段冗余的if else代码块,感觉对设计模式的理解和运用很有帮助,所以分享出来.鉴于原代码会涉及到公司的隐私,因此就不贴出来了.下面以更加通俗易懂的案例来解析. 假如写一个针对员工 ...

  9. 简单工厂模式&策略模式-简介与区别

    不得不说,这两种模式真的很像. 相似点:都用到了面向对象的继承.多态.抽象,都拥有相似的结构. 不同点:工厂模式仅提供具体的实例对象,怎么使用这个对象是client的自由,策略模式client可以通过 ...

随机推荐

  1. Kendo-Grid for Vue API and Template

    写此博客的原因:在做项目时前端用的vue,后端用的jfinal.在前端veu中调用了kendo grid插件,但是在官方文档中对kendo grid for vue 的api和template都不太详 ...

  2. list 列表常用方法

    append(self, p_object)                    在列表末端追加一个新元素 insert(self, index, p_object)             在某个 ...

  3. Ion内存的带cahce与不带cache问题分享

    一次开发中,遇到一个问题:YUV图像(由本地磁盘文件读到ION内存中)缩放时,对于缩放模块的输入源来说,使用带cache的方式要比不带cache的方式速度快数10倍. 为什么会出现这个情况呢? 在解释 ...

  4. Leetcode之深度优先搜索(DFS)专题-199. 二叉树的右视图(Binary Tree Right Side View)

    Leetcode之深度优先搜索(DFS)专题-199. 二叉树的右视图(Binary Tree Right Side View) 深度优先搜索的解题详细介绍,点击 给定一棵二叉树,想象自己站在它的右侧 ...

  5. Delphi - 本地路径的创建、清空本地指定文件夹下的文件

    本地路径的创建 在做下载操作时,我们一般先把文件下载到本地指定的路径下,然后再做其他使用. 为了防止程序出现异常,我们通常需要先判断本地是否存在指定的路径. 以C盘Tmp文件夹为例,我们可以这样做,代 ...

  6. java设计模式3.建造者模式、原型模式

    建造者模式 一个产品常有不同的组成部分作为产品的零件,有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用,有些时候,一个对象的一些性质必须按照某个顺序赋值才 ...

  7. 模式匹配和正则表达式_python

    模式匹配和正则表达式的学习 python实现 正则表达式 其对文字处理有着超高的效率 利用正则表达式可以实现"三步解决一个问题" 步骤 1.用 import re 导入正则表达式模 ...

  8. 关于斐波那契数列的一些恒等式 模板 牛客OI测试赛 A 斐波拉契

    牛客A 斐波拉契 链接:https://www.nowcoder.com/acm/contest/181/A来源:牛客网 设f[i]表示斐波那契数论的第i项 f[1]=1,f[2] =1,f[i] = ...

  9. poj 1984 Navigation Nightmare(带权并查集+小小的技巧)

    题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...

  10. JS数据结构第六篇 --- 二叉树力扣练习题

    1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { ...