`

创建模式之 学习总结

阅读更多

下文转自:http://hi.baidu.com/sanlng/blog/item/b186f4c88bfd86167f3e6fac.html

创建型设计模式是用来解决对象的创建问题。经典二十三种设计模式中,被划分到创建型设计模式中的有:

●单件模式

●抽象工作模式

●工厂方法模式

●生成器模式

●原型模式

每一种模式都代表一种应用场合,也有通常的代码结构,但在学习中如果只注重理解代码结构而忽略或轻视其应用场合,那对设计模式的理解很可能会走上“歧途”,因为代码只是最终的表现形式。理解和掌握设计模式的关键在于理解与把握其应用场合,相较而言,代码结构是次要的。那么创建型的这些设计模式在应用场合上有什么不同呢?

一、单件模式的应用场合

单件模式在理解时比较轻松,因为“单件”的字面可能已经表现出了它的应用场合。如果你要控制一个类在整个应用程序中被实例化的次数,那么这时候就可以使用单件。“单件”不一定指某个类只能被实例化一次,这只是通常的应用场合,你完全可以控制某个类被实例化两次或更多次,关键在于这样做是否有意义。

二、工厂方法与抽象工厂

这两种设计模式比较容易被搞混,因为两者在应用场合与代码结构上都有相似之处。这里我们就需要知道,这两种设计模式最主要的不同点在什么地方。工厂方法与抽象工厂都是用来创建对象的,不同之处在于,工厂方法是用来创建一个对象,而抽象工厂则是用来创建一系列对象的(这些对象是相关的),在代码结构上,抽象工厂要比工厂方法复杂一些。如果从代码结构上去区别这两种设计模式,那很容易发生混乱,所以说,与其通过理解代码结构来理解设计模式,不如通过设计模式的应用场合来区分它们。

三、生成器模式

生成器模式与工厂方法和抽象工厂在代码结构上也有类似之处,尤其与抽象工厂的相似性更多一些,特别是当把生成器模式与工厂方法模式结合到一块的时候,很容易会被认为是抽象工厂。生成器模式是用来创建一个复杂的对象,这个复杂的对象通常由许多子对象按一定的规则组合而成,这与抽象工厂不同。抽象工厂是创建一组相关对象,关键就在于这一组相关对象与生成器模式的一系子对象有什么不同。对生成器模式而言,构成其表示的子对象缺一不可,而抽象厂的一组相关对象则不具有这样的要求,这就是区别。它们的关系可以这样理解,汽车不能缺少轮胎(生成器模式),而一个具体的游戏场景中,可以不存在汽车(抽象工厂)。

四、原型模式

原型设计模式是利用对象的克隆技术来创建新对象。这里有隐匿含的一点,那就是如何处理“原型”对象的状态。如何通过克隆而创建出来的新对象与原型对象具体不同的或是根本没有状态(在新对象刚被创建出的那一时刻),那这里可能就是不原形设计模式了。因为原型设计模式一个重要的重点在于,原型对象与新对象在被创建出的那一时刻要具有相同的状态,说白了就是新对象与原型对象要在某种状态间保持一致,(比如你以一个男人为原型而克隆了一个人,那克隆出来的人应该也是男人(例子不当),只是这个人的个头比原来的人高。)然后根据需要去设置新对象的那些特别的属性,这一点,我们可以称其为“状态保持”。

在我们使用设计模式的时候,有一点要时刻注意,那就是不要“刻意”的去应用设计模式。设计模式的选择与应用,决定于你要解决和处理的问题。并且同一问题可能可以使用不同的设计模式去解决,这里需要我们衡量,因为设计模式的应用是有代价的。

在理解设计模式时,我们也要认识到,设计模式在很大程度是其实就是一种经验的传承(解决某种问题的经验),经验不等同真理(真理也是一定范围内的),所以不要认为所有设计模式的设计模式都是百分百有效的。包括上面我们讨论一切,离开特定的场合,都有可能是错误的。

 

下文转自:http://www.winu.cn/space-14160-do-blog-id-25159.html

到今天为止把创建型的几种设计模式算是学完了,搞一段落.进行一下总结.

时间比较短,还好创建型的比较简单,以后估计不会这么顺利了.由于没有真正的实践在项目中,所以到现在为止,我认为我还没有掌握,仅仅是对设计模式有些了解而已.

人家说英语是说出来的,所以我也把我知道的关于创建型的设计模式的相关知识总结出来,供大家参考和讨论,希望能与各位同仁共同进步.

 

创建型模式,主要用来解决new所带来的对象间的耦合关系,除了singleton和prototype之外,都需要使用factory来负责对象的实例化,prototype是通过原型(也就是抽象)来克隆对象。

 

白话一点儿说,创建型模式就是把有可能经常变化的对象单独拎出来处理,使这些经常变化的部分在发生变化时不会影响整个系统。

 

GOF设计模式有5种是创建模式.

其中Singleton模式用来控制对象创建的个数,一般是一个,可以通过变化创建指定数量的对象.

 

factory method模式是最最基础的创建型模式,也是最基础的设计模式之一。既然是面向对象编程,当然要创建对象。factory method模式就是解决了对象的基本创建问题。对象通过自己的工厂创建实例,在创建点不依赖具体实现而仅仅依赖于对象自己的抽象。编译时只知道要创建哪种对象(抽象),运行时才知道具体会创建这种对象的哪个对象。反正一种对象的行为都是相似的,所以抽象也是一样的。只是具体实现不同。比如车都能转弯,只是摩托车和汽车转弯的具体实现不同,但抽象是相同的。这里编译时只说车要转弯,在运行时再具体告诉程序是哪个车要转弯。

 

abstract factory模式是在factory method模式的基础上发展而来, factory method模式只解决了创建哪个对象的问题,而abstract factory解决了创建哪个系列对象的问题。这一系列对象之间可能有很多关联和交互。白话点而说就是,比如我们肯定都用床上用品,包括床单,被罩和枕巾等。我们不会一辈子都用一套吧,肯定要换洗的,有坏的还得换新的(这里假设整套整套坏/换)。那么abstract factory就用上了。一次创建一套床上用品,不用修改任何地方,只需要增加新的床单类,被罩类和枕巾类,然后在调用时告诉系统,我要用这个新的。就OK了,符合了面向对象的对修改关闭对扩展开放的原则。

 

builder模式与factory method一样,都是创建一个对象。但是它却是创建了一个超级复杂的对象。它可以让我们通过相同的创建过程创建出不同的表示。在这里,创建对象的算法是稳定的,但是对象的各个部分却是不稳定的,经常会变。比如要建造一个房子,建造房子的过程,比如打地基,搭架子,垒砖这些骨干的过程是不变的,这是稳定的算法。但是在造门和窗户的时候却有可能经常发生变化。有可能这个房子要用A工厂的门,那个房子却要用B工厂的门。这是就要用到builder模式了。不管你用谁的门,但是造出来的肯定得是房子。

 

prototype模式诠释了面向对象的依赖倒置原则。当一个Manager对象依赖某个具体实现时,我们把这个实现抽象出来(前提是这个对象是易变的),使Manager对象依赖于这个抽象,这样,以后扩展新的基于这个抽象的实现就会easy了。而manager里通过抽象的克隆创建需要数量的对象。这样,manager只依赖抽象。我想这也是我们提倡面向接口编程的原因。

 

总之,创建型模式解决了软件设计中对象创建的问题,通常,往往是我们遇到了易变类,才会使用创建型模式,至于使用哪种,就要看易变类和系统的特性了。

分享到:
评论

相关推荐

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    设计模式学习知识点总结

    ### 设计模式学习知识点总结 #### 一、总则 设计模式的学习主要围绕面向对象的分析、设计与编程思想展开,旨在通过封装、继承、多态等机制来降低程序间的耦合度,使得程序结构更加灵活,易于维护与扩展。在实际...

    设计模式学习笔记及其模式特点总结

    这些文档涵盖了设计模式的基础知识,通过阅读和学习,你可以深入了解每种模式的原理、应用场景及其实现方式,从而提升你的软件设计能力。绘图1.vsd可能是用于描绘设计模式的UML类图或其他图表,它能直观地展示各对象...

    设计模式学习总结.pdf

    在《设计模式学习总结》中,作者分享了在实际工作中应用设计模式的心得,强调理解设计模式的核心思想而非机械地套用模式。 文中提到的23种设计模式中,作者详细介绍了19种,包括但不限于单例模式、工厂模式、观察者...

    Java与模式 (清晰书签版) 创建模式、 行为模式、 结构模式 模式 清晰3

    《Java与模式 (清晰书签版)》是一本深度探讨Java编程中设计模式的书籍,主要涵盖了创建模式、行为模式和结构模式三大类别。设计模式是软件开发中的宝贵经验总结,它提供了一种在特定场景下解决问题的标准模板,使得...

    煤矿管理创新推进学习型企业创建工作总结范文总结范文.doc

    \n\n创建学习型企业的工作并非一蹴而就,而是遵循了“五步走”规划:宣传发动、理论学习、创建设计、构建体系、试点推广。首先,通过广泛的宣传教育和理论学习,提高了干部职工对创建学习型企业的重要性认识,特别是...

    设计模式学习总结.doc

    它们分为三大类:创建型模式(如工厂模式、单例模式)、结构型模式(如适配器模式、代理模式)和行为型模式(如观察者模式、策略模式)。例如,MVC(Model-View-Controller)模式在图形界面框架中广泛应用,迭代器...

    设计模式之美——教你写出高质量代码

    设计模式是软件工程中的一种最佳实践,它是在特定上下文中解决常见问题的经验总结。"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式...

    李建忠 C#面向对象设计模式纵横谈(25):设计模式总结

    在IT行业中,面向对象设计模式是软件开发中的重要概念,尤其在C#这样的面向对象编程语言中更是不可或缺。...无论是初学者还是经验丰富的开发者,都应该不断学习和探索设计模式,以实现更高效、更优雅的代码设计。

    供电公司创建省级文明单位工作总结文明单位创建工作总结.doc

    【供电公司创建省级文明单位工作总结】 乾县供电分公司作为陕西省地方电力集团的一员,成功创建省级文明单位,这彰显了公司在精神文明建设上的显著成果。创建文明单位不仅提升了企业的整体形象,更促进了公司的快速...

    基于Java设计模式的课程项目总结.zip

    基于Java设计模式的课程项目总结 项目名称 基于Java设计模式的课程项目 项目概述 本项目是一个专注于Java设计模式的学习和实践项目。项目涵盖了多种设计模式,包括创建型模式、结构型模式和行为型模式。通过实现...

    设计模式学习报告

    ### 设计模式学习报告 #### 一、设计模式概述 设计模式是一种被广泛接受和使用的编程解决方案,旨在解决软件设计中的常见问题。它不仅能够帮助开发者编写出更易于理解和维护的代码,还能够促进代码的复用性。设计...

    设计模式学习 ppt

    设计模式是软件工程中的一种最佳实践,用于解决在...总结来说,"设计模式学习ppt"是一个全面介绍设计模式的教育材料,它将帮助学生和开发者掌握设计模式的核心理念,提升软件设计能力,促进代码质量和项目效率的提升。

    23种设计模式学习笔记

    这个“23种设计模式学习笔记”文档将引导你深入理解这些模式,并帮助你在实际编程中有效地应用它们。以下是对23种设计模式的详细解读: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。它常用于控制...

    设计模式总结.pdf

    本总结文档涵盖了所有的设计模式,并对常用的模式进行了详细解释,非常适合程序员在面试前快速复习以及日常学习使用。 文档中提到的六大设计原则,包括单一职责原则、里氏替换原则、接口隔离原则、迪米特法则、开闭...

    设计模式学习.zip

    本资源"设计模式学习.zip"聚焦于C++编程语言中的设计模式应用,是2017年的一次黑马程序员培训课程的配套代码,旨在帮助学习者通过实际的代码示例来理解和掌握设计模式。 在C++中,设计模式主要分为三大类:创建型...

    C++的设计模式学习资料

    ### C++的设计模式学习资料详解 #### 一、引言 设计模式是在软件工程领域内广泛应用的一种编程思想,它能够帮助开发者解决常见的设计问题,并提供一套标准的解决方案。设计模式通常分为三大类:创建型模式、结构型...

    Java设计模式学习.pdf

    文档中描述的是Java设计模式学习笔记,目前涉及了7种设计模式,但没有具体指明这7种模式是什么,计划后续增加更多的模式。虽然文件内容中存在OCR扫描的识别错误,但不影响我们从整体上把握设计模式的脉络和学习方法...

Global site tag (gtag.js) - Google Analytics