`

创建类模式大PK(总结)

阅读更多

创建类模式包括工厂方法模式建造者模式抽象工厂模式单例模式原型模式,它们都能够提供对象的创建和管理职责。其中的单例模式和原型模式非常容易理解,单例模式是要保持在内存中只有一个对象,原型模式是要求通过复制的方式产生一个新对象,这两个不容易混淆。下面主要分析其它三种模式。

 

 

一、工厂方法模式VS建造者模式

 

1、意图不同

在工厂方法模式里,关注的是一个产品整体,无须关心产品的各部分是如何创建出来的;但在建造者模式中,一个具体产品的产生是依赖各个部件的产生以及装配顺序,它关注的是“由零件一步一步地组装出产品对象”,简单地说,工厂模式是一个对象创建的粗线条应用,建造者模式则是通过细线条勾勒出一个复杂对象,关注的是产品组成部分的创建过程。

2、产品的复杂度不同

工厂方法模式创建的产品一般都 是单一性质产品,而建造者模式创建的则是一个复合产品,它由各个部件复合而成,部件不同产品对象当然不同。这不是说工厂方法模式创建的对象简单,而是指它们的粒度大小不同。一般来说,工厂方法模式的对象粒度比较粗,建造者模式的产品对象粒度比较细。

 

实践:如果需要详细关注一个产品部件的生产、安装步骤,则选择建造者,否则工厂。

 

 

二、抽象工厂模式VS建造者模式

 

抽象工厂模式就像一个巨头有许多“工厂”,使用“工厂”来描述构建者,而建造者模式就像一个工厂有许多“车间”,使用“车间”来描述构建者。抽象工厂模式是从一个更高层次去看对象的创建,具体到工厂内部还有很多车间,但这些都是隐藏在工厂内部的细节,对外不公布。而建造者模式就不同了,它是由车间构成,不同的车间完成不同的创建和装配任务,一个完整的汽车生产过程需要引擎制造车间、引擎装配车间的配合才能完成,它们配合的基础就是设计蓝图,而这个蓝图在车间主任手中(导演类)。建造者模式更关心建造过程。虽然从外界来看一个车间还是生产车辆,但是这个车间的转型是非常快的,只要重新设计一个蓝图,即可产生不同的产品。

 

实践:相对来说,抽象工厂模式比建造者模式的尺度要大,它关注产品整体。而建造者模式关注构建过程,因此建行者模式可以很容易地构建出一个崭新的产品,只要导演类能够提供具体的工艺流程。也正因为如此,如果希望屏蔽对象的创建过程,只提供一个封装良好的对象,则可以选择抽象工厂方法模式。而建造者模式可以用在构件的装配方面,如通过装配不同的组件或者相同组件的不同顺序,可以产生一个新的对象,它可以产生一个非常灵活的架构,方便地扩展和维护系统。

2
1
分享到:
评论

相关推荐

    安卓系统签名 需要的文件 platform.pk8 platform.x509.pem fastboot驱动

    总结来说,`platform.pk8`和`platform.x509.pem`是Android系统签名的核心,用于保证系统安全和更新的可靠性。而`fastboot驱动`则是开发者进行系统级调试和更新所必需的工具,它使得设备能够在fastboot模式下与电脑...

    Head First_设计模式(中文版)pdf

    2. **工厂模式**:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂模式使系统可以在不指定具体类的情况下实例化对象。 3. **抽象工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,...

    基于SPOC模式的《人力资源管理概论》混合式教学模式教学设计

    SPOC模式一般在课堂教学过程中穿插使用,包括但不限于课前布置预习任务,发布学习清单,课中发起签到、线上讨论、提问、头脑风暴、小测验、小组PK活动等,课后布置作业,并要求学生进行总结评价。教师通过创建班级...

    欧博案例分享-如何通过优化PMC模式提升生产效率.doc

    【欧博案例分享-如何通过优化PMC模式提升...总结来说,优化PMC模式对于提升生产效率至关重要。通过解决内部管理问题,明确责任分配,改革激励机制,沃德科技有望实现生产流程的高效化和规范化,从而提高整体竞争力。

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    数据库oracle 学习笔记重点总结

    1. **进入SQL*Plus模式:** ```sql sqlplus /nolog ``` 此命令用于进入SQL*Plus界面,但不进行任何登录操作。 2. **以SYSDBA身份连接到数据库实例:** ```sql conn / as sysdba ``` 使用此命令可以以系统...

    Hibernate泛型DAO及使用方法

    泛型DAO是DAO模式的一种改进,通过使用Java泛型,我们可以创建一个适用于任何类型的DAO接口,这样就可以避免为每个实体类都创建一个特定的DAO类。 在给出的代码片段中,定义了一个泛型接口`GenericDao`,它接受两个...

    使用Django来开发一个简单的博客网站,如何实现?,需要的拿走

    ### 总结 以上步骤展示了如何使用Django框架快速搭建一个基本的博客网站。这个简单的示例只是一个起点,在实际开发中,你还可以根据需求增加更多功能,比如用户认证、评论系统、分类标签等功能。Django的强大之处...

    android数据库的crud操作

    例如,这里我们创建了一个名为`SimpleMessageDao`的类,该类实现了`EntityDao, Integer>`接口。 ##### 4.1 SimpleMessageDao类详解 - **构造函数**:`SimpleMessageDao(Context context)`,接收上下文参数,并初始...

    广药数据库实验答案参考.doc

    - **数据库所有者**:XP-202104281226\Administrator(Windows身份验证模式) - **数据库名称**:bookdb - **数据文件逻辑名**:bookdb - **数据文件物理路径**:D:\Program Files\Microsoft SQL Server\MSSQL.1...

    AC自动机.pdf

    ### AC自动机详解 #### 一、AC自动机概述 AC自动机(Aho-Corasick Automaton)是一种...与传统的模式匹配算法相比,AC自动机不仅具有较高的匹配效率,还能一次性处理多个模式串,非常适合于大规模文本搜索和处理场景。

    Java开发人员常用DB2命令总结

    ### Java开发人员常用DB2命令总结 #### 一、DB2 实例管理 在DB2中,实例(Instance)是数据库管理系统的一个独立运行环境。对于Java开发者来说,掌握实例的基本操作至关重要。 - **列出所有实例** - **命令**:`...

    数据库基础脚本 数据库基础脚本

    根据给定的文件信息,我们可以总结出一系列关于数据库管理和操作的关键知识点,主要集中在SQL Server数据库的基础脚本操作上。以下是对这些知识点的详细解析: ### 1. 创建数据库 创建数据库是数据库管理中最基础...

    wasitv.pk:巴基斯坦的。 #1免费电视应用

    6. **广告与商业模式**:作为一个免费应用,wasitv.pk可能会通过植入广告来获取收入,或者提供付费订阅服务,解锁更多高清频道或无广告体验。 7. **法规遵从**:在提供电视内容时,必须遵守巴基斯坦的版权法规以及...

    db2-database-design

    在本篇文章中,我们将深入探讨如何在IBM DB2数据库中设计和创建表格,并重点讲解创建表语句以及如何建立主键。通过一个具体的例子——创建一个名为“HEALTHY_CERTIFICATE”的表,来逐步解析创建过程中的每一个细节,...

    使用UML的数据库分析与设计PPT学习教案.pptx

    b) 概念结构设计:使用ER方法(实体-联系)创建ER图,定义系统的信息组织模式,即概念结构。例如,教师-学生-课程的E-R图展示了三者之间的关系。 c) 逻辑结构设计:将概念结构转换为特定数据库管理系统可接受的...

    基于python的Django框架学生信息管理系统.zip

    例如,`/students/`可能对应`student_list`视图,`/students/<int:pk>/`对应`student_detail`视图,其中`pk`是学生的唯一标识。 5. **forms.py**: 可能包含了表单类,如`StudentForm`,用于用户输入学生信息的验证...

    全国省市区数据库SQL语句

    根据给定的信息,本文将对“全国省市区数据库SQL语句”进行详细的解析与扩展,以便更好地理解如何创建和管理一个包含中国所有省份信息的数据库。 ### 一、数据库及表结构创建 #### 1. 创建数据库 在SQL Server中,...

    Codewarrior 10.2教程

    - **选择浮点运算模式:** 如果选定的芯片不支持硬件浮点运算,则选择软件浮点运算。 - **是否使用专家系统:** 决定是否启用专家系统来自动配置硬件资源。 - **添加主函数:** 选择为项目添加main()函数。 ##### 4...

Global site tag (gtag.js) - Google Analytics