热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

【大话设计模式】——创建型模式总结

看大话时是分类看的,因为创建型模式所包含的模式少,所以先从这里看的。把这几个模式看完了,来个简单的总结。这篇博客将从“是什么?”、“有什么?”、“何时用”三个方面进行总结。一、是什么?创建型:

    看大话时是分类看的,因为创建型模式所包含的模式少,所以先从这里看的。把这几个模式看完了,来个简单的总结。这篇博客将从“是什么?”、“有什么?”、“何时用”三个方面进行总结。


一、是什么?
创建型:从字面上来说就是创建对象的设计模式。在进行创建对象时候,可能会增加复杂度,我们可以根据实际情况
合适的设计模式创建对象来解决这些问题。
    创建型模式一般都是将创建对象的过程与其表示进行分离,提高代码的复用性,可维护性,灵活性以及扩展性。

二、有什么?


(一)概念介绍


1、工厂家族——简单工厂(Simple Factory):是由一个工厂对象决定创建出哪一种产品类的实例,是工厂模式家族中最简单实用的模式。
个人理解:将界面与业务逻辑分离,分离出一个专门创建实例的类。
2、工厂家族——工厂方法(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
个人理解:为了遵循扩展开放,修改关闭原则,将简单工厂类转换为工厂方法接口,将其Switch分支分离成子类去继承工厂方法接口类,顺利的将创建对象的过程延迟到子类。
3、工厂家族——抽象工厂(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
个人理解:工厂方法模式的转变,增加工厂方法接口的方法就重构出了抽象工厂。
4、原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
个人理解:根据原型创建副本,克隆出的副本可以进行修改。
5、建造者(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
个人理解:将对象的创建过程与其表示分离,例如去餐厅点菜,客人不需要知道炒菜的具体过程。
6、单例(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
个人理解:有点类似与数据库中的锁,同一时刻只有一个对象可以访问并创建一个实例,其他的对象只能读,不能创建实例,必须等其释放关闭之后才可以创建实例。

(二)遵循原则

                                                                                                                                                                                                                                                                                                                 三、何时用
1、Simple Factory:要什么,给什么!工厂里有许多产品,而客户想要什么,工厂就可以返回相应的产品。
例如:
(1)书中的计算器,客户端要用加法,运算工厂就将实例化出来的加法运算拿出来给客户端;
(2)去早餐店买早餐,早餐店就相当于一个早餐工厂,可以提供馒头,包子,馄饨等,当顾客说要包子时,营业员就拿出一个包子给顾客。
2、Factory Method:类并不知道需要创建什么样的子类;子类可以指定应该创建什么样的对象;
例如:顾客买衣服,不需要知道衣服是怎么做出来的,而服装厂不需要知道顾客要什么衣服,由具体的服装类决定。
3、Abstract Factory:和Factory Method类似,当相互依赖对象的接口多的时候可以用抽象工厂。
4、Prototype:通过拷贝创建新的对象,原型指定创建的种类。例如:
(1)做兼职写手抄报,照着一个模子写,可以根据需求做一些更改。
(2)生成彩虹,只需要创建一种颜色,其他的通过克隆并修改以下颜色就可以了。
5、Builder:复杂对象的构建,构建过程相同,但是表示不同。例如:炒菜的步骤是一样的,是不变的,但是放的材料的量不同,结果就不同。有喜欢甜的,就多放糖;有喜欢咸的就多放盐。                                                                                6、Singleton:让一个线程在一个时间段内独占。例如:
(1)打印机,同一时间内,只能有一台计算机使用此打印机。
(2)看到单例模式,让我想到了数据库中的并发控制。

四、感受
    上一篇博客,完全是按照书上的思路加上自己的理解来的,看同学们博客都与生活相联系,感觉自己差很多啊,所以后来学的时候尽量联系自己的生活,也不知道想的对不对,反正是强迫自己去想觉得很好玩。对于遵循原则那块有点拿不准,可能是原则还没有理解到位呢,希望在后面的学习中能够更好的理解面向对象的六大原则。
推荐阅读
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 基于事件驱动的并发编程及其消息通信机制的同步与异步、阻塞与非阻塞、IO模型的分类
    本文介绍了基于事件驱动的并发编程中的消息通信机制,包括同步和异步的概念及其区别,阻塞和非阻塞的状态,以及IO模型的分类。同步阻塞IO、同步非阻塞IO、异步阻塞IO和异步非阻塞IO等不同的IO模型被详细解释。这些概念和模型对于理解并发编程中的消息通信和IO操作具有重要意义。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了自动化测试专家Elfriede Dustin在2008年的文章中讨论了自动化测试项目失败的原因。同时,引用了IDT在2007年进行的一次软件自动化测试的研究调查结果,调查显示很多公司认为自动化测试很有用,但很少有公司成功实施。调查结果表明,缺乏资源是导致自动化测试失败的主要原因,其中37%的人认为缺乏时间。 ... [详细]
author-avatar
-sunnydays
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有