跟着实例学习设计模式-工厂方法 、抽象工厂的区别

工厂方法和抽象工厂都属于工厂模式,那么它们到底有什么区别呢?让我们来比较一下。

首先我们从工厂接口的角度来分析一下。

工厂方法:

工厂方法是创建一个产品的不同功能的创建接口,并且同分类不同功能的产品返回的产出物还得是相同的。例如:汽车的发动机的制造就可以使用工厂方法,发动机分为直喷式发动机、涡轮增压式发动机。

抽象工厂:

抽象工厂是创建具有级联关系的一系列产品的,例如汽车,汽车由发动机、油箱、轮胎等组成,那么个这样一个产品是由一些相关联的产品组成的并且又可以分系列(卡车、小汽车、跑车)的产品就可以使用抽象工厂来实现,每个工厂是创建一个产品的一些相依赖的产品(创建发动机、创建油箱)。

其次我们从创建的产品的角度来分析:

工厂方法创建出来的产品是一层的,没有组成关系。例如:发动机、或是加法、减法、乘法等。

抽象工厂创建的产品是多层的,并且层级之间可能存在依赖关系。例如:汽车由卡车、小汽车、跑车等抽象而来,汽车由发动机、油箱、轮胎等组成,再比如:访问不同数据库,数据库有mysql、sql server之分 ,mysql中有用户表、部门表。

以上的分析可能还很浅显,我是希望大家可以自己写一下这两种模式,从中可能会自己体会出来他们的区别。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-09-29 20:10:45

跟着实例学习设计模式-工厂方法 、抽象工厂的区别的相关文章

创建和使用解耦——工厂模式详解(工厂方法+抽象工厂)

1.前言 直接new一个对象是最简单的创建对象的方式,但大量出现在业务代码中会带来至少两个问题.1:创建对象的细节直接暴露在业务代码中,修改实现细节必须修改相关的大量客户端代码.2:直接面向具体类型编程,违反了面向接口编程的原则,系统进行扩展时也不得不进行大量修改.要使得系统具有的良好的可扩展性以及后期易于维护,必须实现对产品的获取和对产品的使用解耦.要做到这两点,首先要对客户端代码屏蔽掉创建产品的细节,其次,客户端必须面向产品的抽象编程,利用java的多态特性在运行时才确定具体的产品.而这,正

设计模式 简单工厂+工厂方法+抽象工厂

简单工厂 简单工厂的优缺点: 缺点:①违反了OCP(开放-封闭原则).(当工厂内增加一个方法创建对象时候,需要在原来的工厂内,添加一个case语句).修改原来的类,是违反设计原则的. ②增加客户端和工厂类的耦合. 优点:①去除(非降低)客户端和具体产品的耦合.客户端和具体产品中间增加一个工厂类,增加客户端和工厂类的耦合. ②封装工厂类,实现代码多平台的复用性.创建对象的过程被封装成工厂类,可以多平台(控制台+WEB+Winform...手机端)调用这个工厂. ③封装工厂类,创建对象的过程(具体逻

跟着实例学习设计模式(3)-工厂方法(创建型)

工厂方法属于创建型设计模式. 设计意图:定义一个用于创建对象的接口.让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类. 静态工厂使用面向对象的方式,有效的攻克了添加新产品给client和实现类带来的代码改动问题.封装了创建过程,减低了添加新产品带来的代码改动错误.可是新增功能须要改动client代码和工厂创建类的推断逻辑,这种设计违背了开放-封闭原则.对扩展开放.对改动封闭,那我们就须要找一种方式避免添加新的功能时改动工厂创建方法的逻辑.(毕竟会对原有代码做改动难免会有失误) 工厂

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥". 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司有一个内部的training需要讲设计模式. v写在前面 在这里呢,需要向

设计模式之简单工厂/工厂方法/抽象工厂

这三个设计模式都属于创建型模式,之间具有关联性,就放在一起讲解.其实简单工厂模式是工厂方法的一个特例,并不是23种设计模式的一种. 使用java来写的这几个设计模式.java文件目录树如下所示: [email protected]:~/code/designpattern/SimpleFactory/src$ tree . ├── Client.java └── zy ├── abstractfactory │   ├── AccerFactory.java │   ├── AppleFacto

设计模式之 简单工厂,工厂方法,抽象工厂

学习来源: C#设计模式,刘伟 创建型模式描述如何将对象的创建和使用分离,让用户在使用对象时无须关心对象的创建细节,从而降低系统的耦合度,让设计方案更易于修改和扩展. 引言: 简单工厂(静态工厂) 1, 模式适用环境 工厂类负责创建的对象比较少,由于创建的对象较少 ,不会造成工厂方法中的业务逻辑太过复杂 客户端只知道传入工厂类的参数,对于如何创建对象 并不关心 2, 简单工厂(静态工厂)方法的缺点: 工厂类集中了所有产品的创建逻辑,职责过重,一旦 不能正常工作,整个系统都要受到影响 增加系统中类

简单工厂、多态工厂和抽象工厂设计模式的比较

工厂模式的主要作用就是封装对象的创建过程,使得程序员不必准确指定创建对象所需要的构造函数,这样做的一个好处就是增加了程序的可扩展性.由于每个面向对象应用程序的设计都需要创建对象,并且由于人们可能需要通过增加新的类型来扩展应用程序,工厂模式可能是最有用的设计模式之一. 总的来说,工厂模式主要分为三种类型:简单工厂模式.多态工厂模式.抽象工厂模式.这三种模式都属于设计模式中的创建行模式,他们多多少少在设计上有些相似之处,其最终的目的都是为了将对象的实例化部分取出来,进而优化系统的架构,增加程序的可扩

设计模式学习03—抽象工厂模式

1.动机与定义 工厂模式中,一个工厂仅仅能提供一个或一类产品,当产品种类较多,形成产品系列(比方我们要创建跨平台的button,菜单,文本框等等一系列GUI控件: 单纯使用工厂模式会产生大量工厂,并且后期维护也不方便,我们能够从产品中找到规律,假设产品等级相对固定,以后仅仅会新增产品族,那么我们就能够把整个产品族放到一个工厂创建,以后新增其它系统产品族也很方便,例如以下图: 这样的模式就是抽象工厂,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则须要面对多个产品等级结构,一个工厂等级结构能

一口一个设计模式--简单工厂VS工厂VS抽象工厂

前几天一直在准备大学毕业,始终脱不开身,今天终于有时间进行设计模式的研究.咱们今天研究的话题是工厂家族三种设计模式的对比--简单工厂VS工厂VS抽象工厂. 经过细心推敲,我们不难得出:工厂模式是简单工厂的升级版,抽象工厂是工厂模式的升级版,简单工厂+抽象工厂是抽象工厂的升级版.知道了它们之间的宏观关系,下面我带它们从一次次蜕变了解它们为什么是这样的关系. 我们最原始的代码思维是把所有的实现都放在一个类中,功能虽然是实现了,但耦合性非常高,很不方便维护,好比活字印刷术之前的印刷,一个地方需要修改,