7.设计模式--抽象工厂模式(AbstractFactory模式)
1.定义
抽象工厂模式也是一种创建型模型,是对工厂的一种抽象,可以理解为生产工厂的工厂。不但工厂是抽象的,产品是抽象的,而且有多个产品需要创建,因此,这个抽象工厂会对应到多个实际工厂,每个实际工厂负责创建多个实际产品。
例如手机和电脑都是通过工厂进行生产的,同时手机和电脑可能属于不同的工厂,但可能是同一个品牌;小米手机和小米电脑属于同一品牌,而华为手机和电脑也属于同一品牌,但是却存在两个维度。
1,产品维度,无论小米手机还是华为手机都属于手机,无论小米电脑还是华为电脑都属于电脑。
2.公司维度,小米手机和小米电脑属于小米公司,而华为手机和华为电脑都属于华为公司。
2.抽象工厂结构图
其中Factory扮演工厂的抽象角色,而Factory1和Fatcory2是具体的工厂角色负责生产。同时ProductA扮演产品的抽象角色,而ProductA1、ProductA2则扮演的是具体的产品角色,是被具体的工厂进行生产的。
3.抽象工厂代码实现
ProductFactory就是工厂的抽象角色,他并不知道产品该怎么被生产,所以只是规定了能够生产哪些产品,比如电脑产品和手机产品。
有了工厂我们需要产品,毕竟工厂要负责生产产品,我们有两个产品分别是手机和电脑,但是他们只是一个抽象的产品,只是定义了自己所能拥有的功能。
产品只是定义了抽象的行为,是需要具体的产品进行完善的,比如小米手机和小米电脑以及华为手机和华为电脑,从产品来说手机都属于抽象手机的具体产品,电脑都属于抽象电脑产品的具体产品。所以手机都应该实现PhoneProduct而电脑都应该实现ComputerProduct。
现在有了具体的产品,但是产品是需要被工厂所生产的吧,而同一个品牌应该被同一个工厂所生产,小米的手机和电脑都应该被小米工厂生产,而华为的手机和电脑都应该被华为工厂生产。只是他们可能不在一个流水线,实际上在同一品牌应该都是同一个工厂。
所以XiaoMiFatcory和HuaWeiFatcory就是不同产品的工厂,他们是工厂抽象的具体实现,所以应该实现ProdyctFactory。同时需要对电脑和手机进行不同的生产,所以创建了不同的产品。
下面进行测试,我们生产一个华为电脑进行开机和打游戏,然后生产一个小米手机开机和打电话。可以看到实际上我们使用华为工厂进行了华为的电脑生产,用小米的工厂生产了小米手机。但是他们并不是同一个工厂,且从产品维度属于同一个产品,从同一个品牌维度又属于同一个品牌。
抽象工厂模式优缺点:
优点:抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联,抽象工厂模式就可以在类内部对产品族的关联关系进行定义和描述,而不必专门引入一个新的类来进行管理。
缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。
小结:抽象工厂模式是为了让创建工厂和一组产品与使用相分离,并可以随时切换到另一个工厂以及另一组产品;抽象工厂模式实现的关键点是定义工厂接口和产品接口,但如何实现工厂与产品本身需要留给具体的子类实现,客户端只和抽象工厂与抽象产品打交。本文参考B站《狂神说》以及廖雪峰的官网
7.设计模式--抽象工厂模式(AbstractFactory模式)相关推荐
- 设计模式--抽象工厂(Abstract Factory)模式
模式定义 提供一个创建一系列相关或互相依赖对象的接口,而无需指定它们具体的类 类图 应用场景 程序需要处理不同系列的相关产品,但是你不希望它依赖于这些产品的具体类时可以使用抽象工厂模式 优点 1.可以 ...
- 设计模式学习笔记——抽象工厂(Abstract Factory)模式
设计模式学习笔记--抽象工厂(Abstract Factory)模式 @(设计模式)[设计模式, 设计模式中文名, 设计模式英文名] 设计模式学习笔记抽象工厂Abstract Factory模式 基本 ...
- 系统架构技能之设计模式-抽象工厂模式
一.上篇回顾 上篇我们主要讲述了简单工厂模式和工厂模式.并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下: 简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建 ...
- 常见设计模式—抽象工厂模式
设计模式-抽象工厂模式 1.什么是抽象工厂模式 抽象工厂模式是围绕一个超级工厂创建其它工厂,是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品. 2.角色分 ...
- 【JAVA进阶系列】JAVA 设计模式 -- 抽象工厂模式(Abstract Factory)
[JAVA进阶系列]JAVA 设计模式 -- 抽象工厂模式(Abstract Factory) [1.1]抽象工厂模式简介 抽象工厂者模式的类结构图 AbstractProduct(抽象产品),Abs ...
- 设计模式-抽象工厂模式实例(二)
(1)案例背景: 计算机包含内存(RAM),CPU等硬件设备 (2)实现步骤: 根据题意,使用抽象工厂模式并画出类图,类图中应包含一个抽象工厂类AbstractFactory, PcFactory和M ...
- 创建设计模式 - 抽象工厂设计模式
创建设计模式 - 抽象工厂设计模式 欢迎来到java示例中的Abstract Factory Design Pattern.摘要工厂设计模式是创造模式之一.抽象工厂模式几乎类似于工厂模式,除了它更像工 ...
- 徒手撸设计模式-抽象工厂模式
概念 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- 设计模式、原则、饿汉式单例模式、抽象工厂、代理模式、观察者模式、模板方法模式使用场景
设计模式 对各种面向对象方法的一种总结.前辈们遇到了好多设计问题,然后利用面向对象解决了.然后他们把解决方案汇总起来,形成了20多种设计模式.它可以有效的帮助我们利用面向对象,来提高代码的复用性. ...
最新文章
- netty使用从0到1
- pybind11回调函数返回指针
- Javascript模式阅读笔记 · 简介
- 语言的进步与代码生成
- MySQL - Found option without preceding group in config file
- spring aop组件_安全性中的Spring AOP –通过方面控制UI组件的创建
- Java网络编程之NIO编程(待补充)
- IOT(7)---物联网平台架构设计
- 数组的冒泡排序快速上手
- ajax ashx session 为空,jquery ajax post 方式ashx文件取不到值。
- 厉害了!这项技术BAT力捧!程序员:我彻底慌了...
- linux下ssh/sftp配置和权限设置
- python适配器模式角色_适配器模式(Adapter模式)详解
- SQL Server 2008 R2 建立数据库,建立表,建立存储过程
- 1136 mysql_MySQL错误:Error Code: 1136
- 新手如果写一个软件,应该是怎么一个流程?
- 如何打造一个顶尖的精确营销系统?
- 基于Java基础的客户信息管理系统
- 宝宝营养粥及如何提高宝宝睡眠
- 秣小白的C语言旅程——第二站(含自我介绍)