(单例模式,工厂方法模式,抽象工厂模式,建造者模式,原型模式)

     创建型模式包括以上五个,本文不再赘述定义部分,主要针对五种模式进行对比学习。




一、AbstractFactory VS Builder


    最近看了一些资料,发现设计模式被翻译成中文,真的是一家一个叫法。Builder在大话中是建造者模式,别的地方有叫生成器模式的,为了统一就尊重原创了,叫Builder吧。


    1.同:比较二者相同的地方,可以发现,都是用来创建复杂的对象的(想一想"能不能换BD"和"小胖人和小瘦人"的例子)。


    2.异:AbstractFactory是产品的复杂性体现,即会产生多个系列的产品对象(联系例子:SQL Server和Access表的建立)。Builder是将部件和过程分开,即创建过程的细节改变(联系例子:小胖人和小瘦人仅body部件不一样)。Bulider在最后的一步返回产品,而对于Abstract Factory来说,产品是立即返回的。




二、三大工厂模式


    看"OO大赛"中,简单工厂小妹被开-闭先森淘汰了,但是本文突出比较也把简单工厂写上了。需要说明的是简单工厂不属于设计模式,因为它对于每一次的扩展时都要更改Factory类,这就是对修改开放了,不符合开闭原则。


    再来看三者层层递进的关系:


    1、Static Factory Method 中只有一份抽象的产品,工厂类是具体的。联系例子:计算器的实现。运算类具体分为+-*/,创建运算符的工厂只有一个,无论是什么运算符都通过这一个类创建,使用switch cash分支语句来判断。


    2、Factory Method 中同样也只有一份抽象产品,但工厂类抽象的。联系例子:学雷锋。Factory Method的改进之处是把简单工厂的内部逻辑判断移到了客户端代码,延迟了类的实例化。


    3、Abstract Factory中工厂是抽象的,但是它独特的地方在于产品至少有两份是抽象的。联系例子:不换DB。产品User表和Department表就是两份抽象产品。




三、Shallow Copy VS Deep Copy 


    在Prototype中学习了浅复制和深复制,发现它们就是C++中的浅拷贝和深拷贝。第一次看大话没有看懂是什么意思,后来反复回去读,才有了一点思路。


    1.同:二者的实现机制对于值类型是一样的。直接将值类型字段拷贝到新对象中,没什么好说的。


    2.异:二者的实现机制对于引用类型是不同的。ShallowCopy使用的是Object类提供的MemberwiseClone方法,只是复制引用,但引用的对象还是指向原来的对象。而DeepCopy使用的是ICloneable接口提供的Clone方法,创建一个新的改变新对象。如下图






四、小结


    对比的学习我是先从定义下手分析的,都是创建类或对象时会涉及到的模式,然后再具体分析相近的模式有什么不同。在学习过程中,不断的在想怎样才能应用到机房收费系统当中??有关这五个模式,目前就想到了DB的访问可以使用反射+抽象工厂,窗体的实例化可以使用单例模式。其他的也没有想到,还是联系的少,要多多努力了。








大话小结(2)——创建型模式相关推荐

  1. 《Android之大话设计模式》--设计模式 创建型模式 第五章:原型模式

    原型模式应用场景举例:  GG和MM经常在QQ上聊天,但是GG打字的速度慢如蜗牛爬行,每次MM在瞬间完成恢复或者问候是,GG都会很紧张的去尽力快速打字,尽管如此,还是让 MM有些不高心,MM说回复信息 ...

  2. 设计模式6——创建型模式之原型模式

    定义:原型模式(Prototype Pattern),用原型模式指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 类型:创建型模式. 类图: 参与角色: CPrototype,抽象原型基类,提供 ...

  3. sjms-2 创建型模式

    设计模式分类 创建型模式(5种):工厂方法模式.抽象工厂模式.创建者模式.原型模式.单例模式 结构型模式(7种):适配器模式.桥模式.组合模式.装饰模式.外观模式.享元模式.代理模式 行为型模式(11 ...

  4. 创建型模式:抽象工厂

    个人博客原文: 创建型模式:抽象工厂 五大创建型模式之三:抽象工厂. 简介 姓名 :抽象工厂 英文名 :Abstract Factory Pattern 价值观 :不管你有多少产品,给我就是了 个人介 ...

  5. 设计模式学习(二)——创建型模式之“工厂模式“

    常见的创建型模式: 单例模式(手写)--只有一个实例 工厂模式--由对象工厂生成对象 建造者模式--组装复杂的实例 原型模式--通过复制生成实例 一.工厂模式的介绍 1.1.工厂模式的定义 在基类中定 ...

  6. 设计模式 - 创建型模式_工厂方法模式

    文章目录 创建型模式 概述 Case Bad Impl Better Impl (⼯⼚模式优化代码) 接口定义 实现奖品发放接⼝ 创建商店⼯⼚ 单元测试 小结 创建型模式 创建型模式提供创建对象的机制 ...

  7. 设计模式 - 创建型模式_原型模式

    文章目录 创建型模式 概述 Case 场景模拟⼯程 Bad Impl Better Impl (原型模式重构代码) 小结 创建型模式 创建型模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性 ...

  8. 设计模式一:创建型模式

    知识储备: 1.接口:若干抽象方法的集合 作用:限制实现接口的类必须按照接口给定的调用方式实现这些方法:对高层模块隐藏了类的内部实现. 2.面向对象设计SOLID原则 开放封闭原则:一个软件实体如类. ...

  9. 创建型模式:工厂方法

    前方高能:<一故事一设计模式>PDF 电子书已经上线,关注公众号即可获取. 个人博客原文 创建型模式:工厂方法 简介 姓名:工厂方法 英文名:Factory method Pattern ...

最新文章

  1. MySQL学习(二)复制
  2. 封装的人人网客户端调用接口
  3. php内打开网址,网站内部跳转外部网站go.php
  4. PAT甲级1023 Have Fun with Numbers:[C++题解]高精度加法和两个vector大小比较
  5. java 复杂 sql_复杂的SQL条件
  6. java jvm 加载_Jvm是如何加载Java类的?
  7. 计算机内存插在主板的哪个槽,四个内存插槽,这是正确的安装顺序
  8. 数据:近24小时以太坊2.0存款合约新增2.06万ETH
  9. 【转】两厢车与三厢车安全性哪个好?
  10. extract进程 oracle,OracleGoldenGate系列:Extract进程的恢复原理
  11. UDSonCAN资料收集
  12. VUE之命令行报错:Component template should contain exactly one root element. If you are using v-if on multi
  13. C3D实现ucf101人体行为识别代码知识总结
  14. 福利:阿里巴巴Java开发手册(第2版)
  15. 福建农林大学计算机课程表,福建农林大学课程表.doc
  16. 关于error LNK2005: char * xxx (?xx@@3PADA) already defined in xxx
  17. VMware vCenter Converter 物理机迁移
  18. 共模电压 matlab,三电平光伏并网逆变器共模电压SVPWM抑制
  19. 5-11 猿课 笔记
  20. linux下flex与bison源码安装,Win flex-bison开发环境配置

热门文章

  1. 灌区泵站及闸门控制自动化系统
  2. Eureka服务续约(Renew)源码分析
  3. redis对过期数据的删除策略
  4. CMD命令提示符窗口中的快捷键、小技巧和常用命令
  5. EXCEL 在复杂查询时摒弃vlookup() sumif() 等公式,而使用数据透视表的初步学习
  6. nexus 5X刷机并使用Magisk获取root权限
  7. C语言--NTC阻值转温度算法
  8. C#高德地图经纬度转地理位置或物理地址
  9. 牧场养牛区块链源码+带积分商城/抽奖/会员特权
  10. 微信小程序 button按钮怎么触发事件? bindtap语法怎么使用?