抽象工厂模式-与-工厂方法模式区别

首先来看看这两者的定义区别:

工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类

抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类

       个人觉得这个区别在于产品,如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。

再来看看工厂方法模式与抽象工厂模式对比:

 

工厂方法模式

抽象工厂模式

针对的是一个产品等级结构针对的是面向多个产品等级结构
一个抽象产品类多个抽象产品类
可以派生出多个具体产品类每个抽象产品类可以派生出多个具体产品类
一个抽象工厂类,可以派生出多个具体工厂类一个抽象工厂类,可以派生出多个具体工厂类
每个具体工厂类只能创建一个具体产品类的实例每个具体工厂类可以创建多个具体产品类的实例

                                  

举个例子说明下:

用种蔬菜的例子来说明事实,最初的时候,由于规模小,只种植一种蔬菜,根菜类蔬菜,这个时候由于种植方式比较简单,采用简单工厂模式即可,主要目的是让工人轻松,下达工厂种植即可,但是随着种植厂的发展以及市场的需求,要增加一种蔬菜类型种植了,茎菜,由于茎菜与根菜种植方式不一致,就需要两个专门的种植工厂来进行管理,那么久采用工厂模式来管理,一个工厂负责一种作物的种植,这个时候产品可以理解为仍然在一个层次。但是随着科技的发展,我们逐步要种植转基因与非转基因食品了,在以前的蔬菜种类上又增加了一个层次,这个时候无法将其作为一个层次来解决,所以必须采用抽象工厂的方式来解决。我用UML图表示三种结构:

1

 11    上面的UML图很明显的就看出来了,抽象工厂可以创建多个产品类对象,如在种菜工厂中,有种根菜,种茎菜。工厂模式与抽象工厂模式以及简单工厂模式只有在具体应用的时候,分析具体的产品层级,然后选择相应的设计模式。

    而在每一个层次,种菜工人所关心的对象也不一样,在简单工厂模式下,工人要想到种植萝卜还是白菜,在工厂模式下,工人想到是种植根菜还是茎菜,而在抽象工厂模式下,则关心种植基因菜还是非基因菜

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

navicat设计表中添加自增长列

写web通讯录的时候在添加联系人时候需要主键故采用自增长列为主键,百度链接有详细教程 点击打开链接,注意的是在设计表中添加栏位后把类型改成bigint才会出现自增长选项,希望对你有用

ElasticSearch 索引、更新和删除数据

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.1/client.html Relational DB -> Databases -> Tables -> Rows -> Columns Elasticsearch -> Indices -> Types -> Documents -> Fields 创建索引 , 5个分片,1个副本 …

osg学习笔记(一)

场景图形采用一种自顶向下的,分层的树状数据结构来组织空间数据集,以提高渲染的效率 场景图形树结构的顶部是一个根节点,从根节点向下延伸,各个组节点中均包含了几何信息和用于控制其外观的渲染状态信息。根节点和各个组节点都可以…

Centos7.x 安装 CDH 6.x

前置条件 ntp服务安装防火墙关闭 执行以下优化代码 systemctl stop firewalld.service echo "* soft nofile 128000" >>/etc/security/limits.conf echo "* hard nofile 128000" >>/etc/security/limits.conf echo "* so…

osg学习博客

http://www.cnblogs.com/mazhenyu/p/3522387.html http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html(基础知识)

Windows IEDA 编译Hbase源码报错 - 无法执行shell脚本

windows 下编译 hbase源码,报错 [ERROR] Command execution failed. java.io.IOException: Cannot run program "bash" (in directory "D:\File\ideaWorkspace\hbase-1.4.10-src\hbase-1.4.10\hbase-shaded\hbase-shaded-check-invariants\target\…

怎样查找自增列主键的id

select max(id) from inform (inform为表名,查询最大的id值)

c++使用Lua

http://www.jb51.net/article/55096.htm

最新版 VMware 安装,虚拟机安装, Ubuntu可视化linux系统安装

一、下载 地址:https://www.vmware.com/cn.html 二、安装VM 选择相应配置,一直下一步即可 双击打开VMware,输入密钥:CG392-4PX5J-H816Z-HYZNG-PQRG2 Ubuntu 镜像下载地址: https://www.ubuntu.com/download/desktop/…

何为“渲染”

这个问题也曾经困惑过我很久.其实"渲染","绘制","画画"这三个词是一个意思.对应的英文是Render,Draw,Paint.但"渲染"的逼格要高于"绘制","绘制"的逼格要高于"画画".在计算机图形学相关的书中,你只会看到…

java 获取插入数据的自增长id

/*** * 这是插入一条数据的同时,获取该数据的则增长列的值(该例子的自增长列是id)* * author LZL* */ public class Auto_Increment {private static Connection conn null;private static PreparedStatement stsm null;private static Res…

Flink 集群搭建安装 CentOS 7.x 版本

基本准备: JDK免密登录(不设置后期启动可以手动输入密码)Centos 7.x 一、下载Flink 下载地址:http://flink.apache.org/downloads.html 我这里使用:https://www.apache.org/dyn/closer.lua/flink/flink-1.9.0/flin…

Mipmap纹理技术简介

在三维世界中,显示一张图的大小与摄象机的位置有关,近的地方,图片实际象素就大一些,远的地方图片实际象素就会小一些,就要进行一些压缩,例如一张64*64的图,在近处,显示出来可能是50*50,在远处可能显示出来是20*20. 如果只限于简单的支掉某些像素,将会使缩小后的图片损失很多细节…

子网掩码、最大主机、最大子网数的计算

前言: 不管是在校招笔试中,还是在软考中,基础知识都是尤为重要的,尤其是计算机网络这块,经常考到这块,所以这里做一个笔记总结一下。下面给出一个具体的案例来分析:题目:1、…

web通讯录之登录注册界面

登录页面: 功能说明:登录页面是在页面模糊背景网站中找的素材加以修改成自己想要的登录界面,我们老师让我们在登录时候加验证码,看了大部分人用的是签名登录方式,觉得没有什么特色因此设计了滑动登录,把验证…

使用IntelliJ IDEA导入 Flink 消费kafka报错 Error: A JNI error has occurred, please check your installation an

提示找不到类,pom中已经引用了jar包,使用eclipse也可以执行,就是IntelliJ不行 java.lang.NoClassDefFoundError: org/apache/flink/api/common/serialization/DeserializationSchemaat java.lang.Class.getDeclaredMethods0(Native Method)a…

有限状态机/FSM

有限状态机(FSM)的设计与实现(一) 有限状态机(FSM)是表示有限个状态及在这些状态之间的转移和动作等行为的数学模型,在计算机领域有着广泛的应用。通常FSM包含几个要素:状态的管理、…

web通讯录之通讯录主界面

界面展示: 界面所用的素材网址点击打开链接,在用网上素材时候首先要把代码看懂才能进行修改,因此希望读者好好看看源码,看的时候着重看看字母排序原理、JQuery设计等等。 分组展示:这个地方有个不好的地方&#xff0c…

NameNode 启动失败 - There appears to be a gap in the edit log. We expected txid xxx, but got tx

场景 NameNode迁移,导致一个节点无法启动 异常 在Namenode主动迁移,或者Namenode机器挂掉无法恢复时,我们需要Namenode节点迁移,迁移经常会出现一个NameNode启动成功,另外一个standby启动失败,报错如下 …

opengl光照

看一张图片: 图中绘制了两个大小相同的白色球体。其中右边的一个是没有使用任何光照效果的,它看起来就像是一个二维的圆盘,没有立体的感觉。左边的一个是使用了简单的光照效果的,我们通过光照的层次,很容易的认为它是一…