六种创建型设计模式的比较和总结

一、描述

创建型设计模式包括如下几个:简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、创建者模式(Builder)、原型模式(Prototype)、单例模式(Singleton)。

二、六种创建型设计模式的比较

简单工厂模式:简单工厂模式又叫静态工厂模式,它定义一个具体的工厂类来负责所有产品对象的创建,因此这个工厂类的职责过大,当客户端UI与某些产品的创建有不同的要求时,需要不断地修改工厂类,增加判断逻辑,不利于后期维;而且由于简单工厂模式使用静态方法来创建对象,这就导致静态方法不能被继承。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在简单工厂模式下,我有一个工厂类要实现创建这六个部件的方法,也就是所有部件产品的创建都放在一个工厂类中。

简单工厂模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45399321

工厂方法模式:在简单工厂模式的基础上,不再是用一个工厂类创建所有产品的对象,而是一个具体的工厂类负责创建一个单独的产品,有几个不同的产品就需要几个不同的工厂类,即使这两个产品有某些联系,也需要分成不同的工厂类。在这个模式中,抽象工厂类负责定义创建对象的接口,而实现抽象工厂的具体工厂类负责具体对象的创建,随着产品数量的不断增加,具体工厂类的数量将会越来越多。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在工厂方法模式下,我有一个四个抽象工厂类:轮胎、发动机、底盘、车身;有八个具体工厂类:奥迪轮胎工厂类、奥迪发动机工厂类、奥迪底盘工厂类、奥迪车身工厂类,BYD轮胎工厂类、BYD发动机工厂类、BYD底盘工厂类、BYD车身工厂类,随着不同品牌的汽车车牌的增加,我的具体工厂类也会越来越多。

工厂方法模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45399831

抽象工厂模式:在工厂方法模式的基础上,我们抛弃了一个产品对应一个具体工厂类的想法,而是由一个具体的工厂类负责创建一系列有相互关联的产品,当一系列相互关联的产品被设计到一个工厂类之后,客户端的调用就变得非常简单;如果要更换这个谢列的产品,则只需要更换一个工厂类即可。但是这个模式把相互关联的产品的组装放在了客户端,这会使客户端变得非常臃肿;如果把零件组装放在工厂类里面,由违反了工厂类“单一职责”的原则,使工厂类既要负责对象的创建,又要负责产品的组装。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在抽象工厂模式下,我有一个抽象工厂类:这个工厂类定义了创建轮胎、发动机、底盘、车身四个接口,然后我有两个具体工厂类:奥迪汽车工厂类和BYD汽车工厂类,这个两个类实现了抽象工厂中的所有方法,可以创建四种产品。这大大减少了具体工厂类的数量,把有相互联系的四种产品放到一个类中加以联系,但是这个具体工厂类只负责创建四种产品,却不能将这四个产品组装起来,组装的工作需要客户端负责,使得客户端变得异常庞大。

抽象工厂模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45418163

创建者模式:创建者模式只是在抽象工厂模式上多加了组装类,这个组装类负责将一系列有相互关系的产品进行组装,这个组装类负责调用具体工厂类创建产品的方法,将产品创建并组装好,然后客户端直接调用这个组装类来生产一个整体的产品。

例如:我要创建奥利汽车的轮胎、发动机、底盘、车身,也要创建BYD汽车的轮胎、发动机、底盘、车身,那么在创建者模式下,我在有抽象工厂模式下的所有抽象类和具体类的同时,我多了一个组装类,这个组装类调用具体工厂类创建部件,并把部件进行组合最终将结果返回给客户端。

创建者模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45419489

原型模式:原型模式是通过一个原型对象来表明要创建对象的类型,然后使用复制这个原型对象的方法来创建更多同类型的对象,在原型模式中可以动态地添加产品类,而且对整体结构没有影响。

例如:我要创建一辆BYD的汽车,那么我可能在流水线上会有一道工序是组装车身,然后第二道工序是在第一道工序的基础上(一个车身原型)加上一个轮胎,然后第三道工序在第二道工序上增加发动机,以此类推,每一道工序完成后产生了一个原型,下一道工序是相当于拷贝了前一道工序的结果原型,并在这个基础上再加上部件。

原型模式模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45422425

单例模式:单例模式就是确保一个类只有一个实例,并且该实例是自动创建,并可以向整个系统提供该实例,客户端只能调用一个公共接口来产生一个实例,而且只能产生一次。

单例模式模式案例详情请见:http://blog.csdn.net/tongyuehong137/article/details/45438817

时间: 2024-10-19 14:04:59

六种创建型设计模式的比较和总结的相关文章

创建型设计模式总结(二)

上篇文章我们介绍了创建型设计模式的前三种:简单工厂模式.工厂方法模式和抽象工厂模式.这一篇文章,我们系统介绍一下其他的三种创建型设计模式:创建者模式.原型模式和单例模式. 一.创建者模式 创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象. 创建者模式通常包括如下几种角色: 1.建造者角色(Builder) 对复杂对象的

[Python编程实战] 第一章 python的创建型设计模式1.1抽象工厂模式

注:关乎对象的创建方式的设计模式就是"创建型设计模式"(creational design pattern) 1.1 抽象工厂模式 "抽象工厂模式"(Abstract Factory Pattern)用来创建复杂的对象,这种对象由许多小对象组成,而这些小对象都属于某个特定的"系列"(family). 比如说,在GUI 系统里可以设计"抽象控件工厂"(abstract widget factory),并设计三个"具体子

设计模式之:创建型设计模式(6种)

创建型设计模式有: 共6种 简单工厂模式(Simple Factory) 工厂方法模式(Factory Method) 抽象工厂模式(Abstract Factory) 建造者模式(Builder) 原型模式(Prototype) 单例模式(Singleton) 简单工厂模式 功能:主要用于创建对象.新添加类时,不会影响以前的系统代码.核心思想是用一个工厂来根据输入的条件产生不同的类,然后根据不同类的virtual函数得到不同的结果. 优点: 适用于不同情况创建不同的类时 缺点: 客户端必须要知

外观模式 门面模式 Facade 创建型 设计模式(十三)

外观模式(FACADE) 又称为门面模式 意图 为子系统中的一组接口提供一个一致的界面 Facade模式定义了一个高层接口,这一接口使得这一子系统更加易于使用. 意图解析 随着项目的持续发展,系统基本上都是会往功能更全面的方向发展,那么也就意味着我们的系统将会变得更加复杂. 系统会被划分为多个单独的子系统,每个子系统完成一部分功能,通过分工协作完成全部功能. 一个子系统也可能进一步拆分为更小的几个子系统. 程序中的文件将会越来越多,相互关联也会变得更加复杂 当使用一个功能的时候,作为客户端 你需

创建型设计模式总结

创建型设计模式共有五种:单例模式,简单工厂模式,抽象工厂模式,建造者模式,原型模式. 单例模式:创建一个只能new一次的类,只要这个类的资源没有被释放,无法在被实例化.确保对象的唯一性. 简单工厂模式:一个抽象实现类,一个抽象工厂类,分别需要普通类继承于这两个类,使用的时候实例化抽象工厂类指定到实现类,调用工厂方法.在有新需求时只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改.不过这样在一定时间积累之后会让自己的代码过于沉重和复杂,当程序已经满足不了原有的需求时,改起来会很困难

一、创建型设计模式

包括简单工厂.工厂方法.抽象工厂.建造者.原型和单例模式. 1)简单工厂 又叫静态工厂方法,由一个工厂对象决定创建某一种产品对象类的实例. 两种实现方式,第一种是通过类实例化对象创建,第二种是创建一个新对象然后包装增强其属性和功能. demo代码. 2)工厂方法 通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例. 将工厂方法看作是一个实例化对象的工厂类. demo代码. 3)抽象工厂 通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例. 用它作为父类来创建一

"围观"设计模式(29)--创建型设计模式总结(单例、工厂、原型、创建者)

设计模式源码下载地址 设计模式源码下载地址 1  单例模式 单例模式,也叫单子模式,是一种常用的软件设计模式.在应用这个模式时,单例对象的类必须保证只有一个实例存在.许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为.比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息.这种方式简化了在复杂环境下的配置管理.----维基百科(WIKIPEDIA) 个人的理解: 单例模式概

创建型设计模式 之 原型模式

同为创建型模式的原型模式与单例模式是密不可分的,这也是最常用的设计模式之一. 原型模式是一种非常简单的设计模式.这里除了基本介绍和演示,还详细介绍了Java中原型模式的本质. 一.介绍 同样,先来看一下<研磨设计模式>的定义——用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象. 原型模式的本质——克隆生成对象. 那么原型模式是什么意思呢?说白了就是克隆自身.我们知道Java中没有引用这个概念,Java用变量名代表引用.像 Apple a = new Apple();我们知道,想要操

java语言实现创建型设计模式—工厂方法模式

一.描述 基于简单工厂模式中将所有类的创建和初始化放在一个工厂类中出现的问题,我们引进了工厂方法模式,该模式是GoF总结的23种设计模式的第一种,这个设计模式将一个工厂类拆分成多个具体的工厂类,每个具体的工厂类负责相应的类的对象的创建. 在工厂方法模式中,抽象工厂类负责定义创建对象的接口,具体对象的创建由实现该抽象工厂的具体工厂类来完成,它由四部分组成:抽象工厂类.实现抽象工厂类的具体工厂类.抽象类.实现抽象类的具体类. 二.工厂方法模式的优缺点 优点:在工厂方法模式中,创建对象的任务由具体的工