秒懂设计模式之抽象工厂模式(Abstract Factory Pattern)
[版权申明]非商业目的注明出处可自由转载
博文地址:https://blog.csdn.net/ShuSheng0007/article/details/86644481
出自:shusheng007
设计模式汇总篇,一定要收藏:
永不磨灭的设计模式(有这一篇真够了,拒绝标题党)
前言
人在IT江湖飘,不懂设计模式咋装X?
今天让我们一起来研究一下三种工厂模式,其均为创建型模式,即讨论的是如何创建一个类的对象的问题。就是以各种高逼格的方式最终将一个类的对象new出来,一点也不神秘。如果你发现需要一个类的对象而你又不会这些装X神器,那你就直接new好啦,爱谁谁。。。不过你也就逃脱不永远是个小白的命运啦,过几年混不下去了就只能去卖奶茶,什么?你不想那么快就去卖奶茶,那就好好学习这些装X神器!
类型
创建型(creational)
难度
4颗星
定义
对没有相关经验的同学的废话又来了:
The essence of the Abstract Factory Pattern is to “Provide an interface for creating families of related or dependent objects without specifying their concrete classes”
抽象工厂为创建一组相关或者是相互依赖的对象提供一个接口,而不需要指定他们的具体类
使用场景
如果你的业务中出现了要依据不同的产品家族来生产其旗下的一系列产品的时候,抽象工厂模式就配上用场了。
例如小米公司和苹果公司就是两个不同产品家族,而他们两家都生产笔记本电脑和手机,那么小米的笔记本电脑和苹果的笔记本电脑肯定不一样,手机情况也是如此。这就构成了两个产品家族的系列产品之间比较的关系。
再比如麦当劳和肯德基是两个不同的产品家族,他们都生产汉堡和果汁。
如何实现
业务场景
今天王二狗约自己在富士康工作的老乡出来喝酒,没想到老乡最近一直在加班。听说接了个大活,要同时为小米公司和苹果公司代工他们的笔记本电脑和手机生产业务。
抽象工厂模式是三种工厂模式中最为复杂的一个,其关键在于品牌家族的概念,这里的一个工厂要生产某一个品牌家族里面的系列产品。
下图为具体案例的UML图
图中有两个产品家族 小米公司 和 苹果公司 ,每个产品家族中包含两种产品,笔记本电脑与手机。
所以需要两个工厂。XiaoMiFactory
与AppleFactory
,他们都实现抽象工厂接口AbstractFactory
。
XiaoMiFactory
生产MiComputer
和MiPhoto
,AppleFactory
生产MacComputer
和IPhoto
。
其中MiComputer
和MacComputer
是同一类型的产品,都是笔记本电脑,实现同一个接口Computer
。
其中MiPhoto
和IPhoto
是同一类型的产品,都是手机,实现同一个接口MobilePhoto
。
此处就一目了然了,富士康需要两个工厂,一个工厂生产小米的笔记本电脑和手机,另一个工厂生产苹果的笔记本电脑和手机。
使用抽象工厂模式
第一步:定义一个电脑的抽象基类,里面有一个为电脑安装操作系统的抽象方法。
//电脑接口
public abstract class Computer {public abstract void setOperationSystem();
}
public class MacComputer extends Computer {@Overridepublic void setOperationSystem() {System.out.println("Mac笔记本安装Mac系统");}
}
public class MiComputer extends Computer {@Overridepublic void setOperationSystem() {System.out.println("小米笔记本安装Win10系统");}
}
第二步:定义一个手机的抽象基类,里面有一个为手机安装操作系统的抽象方法。
//手机接口
public abstract class MobilePhoto {public abstract void setOperationSystem();
}
public class IPhoto extends MobilePhoto {@Overridepublic void setOperationSystem() {System.out.println("苹果手机安装IOS系统");}
}
public class MiPhoto extends MobilePhoto {@Overridepublic void setOperationSystem() {System.out.println("小米手机安装Android系统");}
}
第三步:定义工厂类,这里的工厂不是按照具体的产品类型定义,而是按照品牌家族来定义。
例如现在有两个品牌小米和苹果,那么就需要分别为这两个品牌各定义一个工厂,每个工厂生产这个品牌家族的系列产品,例如笔记本电脑和手机。
//抽象工厂接口
public interface AbstractFactory {Computer makeComputer();MobilePhoto makeMobilePhoto();
}
public class AppleFactory implements AbstractFactory {@Overridepublic Computer makeComputer() {return new MacComputer();}@Overridepublic MobilePhoto makeMobilePhoto() {return new IPhoto();}
}
public class XiaoMiFactory implements AbstractFactory {@Overridepublic Computer makeComputer() {return new MiComputer();}@Overridepublic MobilePhoto makeMobilePhoto() {return new MiPhoto();}
}
第四步:使用工厂来生产产品,这里每个工厂生产的是那个品牌家族的一系列产品,而不是一个。
public static void main(String[] args) {//使用苹果工厂生产苹果公司的系列产品AbstractFactory appleFactory=new AppleFactory();appleFactory.makeComputer().setOperationSystem();appleFactory.makeMobilePhoto().setOperationSystem();//使用小米工厂生产小米公司的系列产品AbstractFactory miFactory=new XiaoMiFactory ();miFactory.makeComputer().setOperationSystem();miFactory.makeMobilePhoto().setOperationSystem();}
理解抽象工厂模式的核心关键在于理解品牌家族的概念,简单工厂方法与工厂方法创建工厂的着眼点为某类具体的产品,某个工厂与某个产品对应,而抽象工厂某个工厂与产品的家族对应,这个工厂可以生产这个品牌家族的一系列产品。
抽象工厂模式技术要点总结
- 要准确识别出当前场景是在构建哪些产品家族的系列产品对象。
- 每个产品家族的产品系列都要在 AbstractFactory 接口里面定义
总结
总的来说此模式在日常开发中使用频率不高,但关键时刻是能起大作用的。
设计模式值得你可以练习!
GitHub源码地址:design-patterns
秒懂设计模式之抽象工厂模式(Abstract Factory Pattern)相关推荐
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...
- 【设计模式】抽象工厂模式 Abstract Factory Pattern
简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...
- Net设计模式之抽象工厂模式(Abstract Factory Pattern)(1)
一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...
- 设计模式剖析——抽象工厂模式Abstract Factory Pattern
含义 与工厂方法模式相比,概念有些不一样.有抽象零件.抽象产品.抽象工厂.用零件来组装出产品,组装出的产品才是完整的产品. 既然一个完整产品需要多个零件,那么每种具体工厂自然也需要可以同时生产出多种零 ...
- 设计模式 - 抽象工厂模式(abstract factory pattern) 详解
抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916 ...
- 抽象工厂模式 Abstract Factory Pattern
源地址 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建 ...
- 抽象工厂模式-Abstract Factory Pattern
抽象工厂模式-Abstract Factory Pattern 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类.抽 ...
- 设计模式之抽象工厂模式(Abstract Factory)摘录
面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...
- 设计模式之抽象工厂模式---abstract factory
模式的介绍 模式的定义 Provide an interface for creating families of related or dependent objects without speci ...
- 极速理解设计模式系列:10.抽象工厂模式(Abstract Factory Pattern)
五个角色:抽象产品角色(AbstractProduct).具体产品角色(Product).抽象工厂角色(AbstractFactory).具体工厂角色(ConcreteFactory).客户端(Cli ...
最新文章
- 【ASP.NET】ASP.NET中权限验证使用OnAuthorization实现
- 清除浮动的几种常见方法
- Vue.js:监听属性
- 不使用 Ruby 的十个理由
- MVC Areas的使用
- 60度斜坡怎么计算_【测绘】南方CASS土方计算方法—方格网法
- 【多元域乘法】多项式乘法电路原理及MATLAB详解
- mac下安装前端模板引擎Jinja2
- mysql数据的表分区一
- MySQL迁移到ClickHouse方案
- 企业架构规划及服务器优化参数
- strip python里面是什么意思_python中的strip是什么意思
- 有的时候看项目,和创业者交流,发现他们的企业
- 1、linux网络服务实验 用PuTTY连接Linux
- HDU1328 ZOJ1240 IBM Minus One【水题】
- Python的Turtle绘制纳兹咩的娘口三三
- atitit.表格的绑定client side 最佳实践
- 北大中文核心期刊目录(部分)
- php智能合约语言,智能合约语言 Solidity 教程系列9 - 错误处理
- ZOJ 3939 The Lucky Week
热门文章
- 16、【易混淆概念集】-第十章 沟通方法 会议 沟通渠道计算 沟通管理计划
- “Rimon天气”Android天气查询软件项目总结
- 养成数据分析思维-第三天(面试官可能会问到的问题)
- 电脑连接网络后显示服务器未发送任何数据因而无法载入该网页的解决办法
- 扁鹊见王的故事——《重构》前言
- 量子计算机 郭光灿,郭光灿(中国科学院院士、量子信息学家)_百度百科
- 江苏python二级考试时间,江苏2021年3月计算机二级考试报名时间安排
- 无线技术开发开篇 无线基础 知识
- 深度学习中的潜在空间
- 【探讨】站长说说之SEO站内优化总结七点