96SEO 2026-02-20 09:07 0
前言本文章为瑞_系列专栏之《23种设计模式》的抽象工厂模式篇。

本文中的部分图和概念等资料来源于博主学习设计模式的相关网站《菜鸟教程
设计模式》和《黑马程序员Java设计模式详解》特此注明。
本文中涉及到的软件设计模式的概念、背景、优点、分类、以及UML图的基本知识和设计模式的6大法则等知识建议阅读
Pattern是围绕一个超级工厂创建其他工厂。
该超级工厂又称为其他工厂的工厂。
这种类型的设计模式属于创建型模式它提供了一种创建对象的最佳方式。
在抽象工厂模式中接口是负责创建一个相关对象的工厂不需要显式指定它们的类。
每个生成的工厂都能按照工厂模式提供对象。
抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口而无需指定具体实现类。
通过使用抽象工厂模式可以将客户端与具体产品的创建过程解耦使得客户端可以通过工厂接口来创建一族产品。
抽象工厂模式与工厂方法模式不同工厂方法模式中考虑的是一类产品的生产这些工厂只生产同种类产品同种类产品称为同等级产品也就是说工厂方法模式只考虑生产同等级的产品但是在现实生活中许多工厂是综合型的工厂能生产多等级种类
的产品如电器厂既生产电视机又生产洗衣机或空调大学既有软件专业又有生物专业等。
意图提供一个创建一系列相关或相互依赖对象的接口而无需指定它们具体的类。
何时使用系统的产品有多于一个的产品族而系统只消费其中某一族的产品。
应用实例工作了为了参加一些聚会肯定有两套或多套衣服吧比如说有商务装成套一系列具体产品、时尚装成套一系列具体产品甚至对于一个家庭来说可能有商务女装、商务男装、时尚女装、时尚男装这些也都是成套的即一系列具体产品。
假设一种情况现实中是不存在的但有利于说明抽象工厂模式在您的家中某一个衣柜具体工厂只能存放某一种这样的衣服成套一系列具体产品每次拿这种成套的衣服时也自然要从这个衣柜中取出了。
用
的思想去理解所有的衣柜具体工厂都是衣柜类的抽象工厂某一个而每一件成套的衣服又包括具体的上衣某一具体产品裤子某一具体产品这些具体的上衣其实也都是上衣抽象产品具体的裤子也都是裤子另一个抽象产品。
优点当一个产品族中的多个对象被设计成一起工作时它能保证客户端始终只使用同一个产品族中的对象。
抽象工厂模式通常涉及一族相关的产品每个具体工厂类负责创建该族中的具体产品。
客户端通过使用抽象工厂接口来创建产品对象而不需要直接使用具体产品的实现类。
是一种为访问类提供一个创建一组相关或相互依赖对象的接口且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
抽象工厂模式是工厂方法模式的升级版工厂方法模式只生产一个等级的产品而抽象工厂模式可生产多个等级的产品。
本文要介绍的抽象工厂模式将考虑多等级产品的生产将同一个具体工厂所生产的位于不同等级的一组产品称为一个产品族下图所示横轴是产品等级也就是同一类产品纵轴是产品族也就是同一品牌的产品同一品牌的产品产自同一个工厂。
Factory提供了创建产品的接口它包含多个创建产品的方法可以创建多个不同等级的产品。
Factory主要是实现抽象工厂中的多个抽象方法完成具体产品的创建。
抽象产品Product定义了产品的规范描述了产品的主要特性和功能抽象工厂模式有多个抽象产品。
具体产品ConcreteProduct实现了抽象产品角色所定义的接口由具体工厂来创建它
现有一家咖啡店要生产咖啡还要生产甜点如提拉米苏、抹茶慕斯等要是按照工厂方法模式需要定义提拉米苏类、抹茶慕斯类、提拉米苏工厂、抹茶慕斯工厂、甜点工厂类很容易发生类爆炸情况。
其中拿铁咖啡、美式咖啡是一个产品等级都是咖啡提拉米苏、抹茶慕斯也是一个产品等级拿铁咖啡和提拉米苏是同一产品族也就是都属于意大利风味美式咖啡和抹茶慕斯是同一产品族也就是都属于美式风味。
ItalyDessertFactory();AmericanDessertFactory
factory.createDessert();System.out.println(coffee.getName());dessert.show();}
瑞该案例实现使用抽象工厂模式如果要加同一个产品族的话只需要再加一个对应的工厂类即可不需要修改其他的类。
AbstractFactory。
然后创建一个工厂创造器/生成器类
if(shapeType.equalsIgnoreCase(CIRCLE)){return
if(shapeType.equalsIgnoreCase(RECTANGLE)){return
if(shapeType.equalsIgnoreCase(SQUARE)){return
if(color.equalsIgnoreCase(RED)){return
if(color.equalsIgnoreCase(GREEN)){return
if(color.equalsIgnoreCase(BLUE)){return
创建一个工厂创造器/生成器类通过传递形状或颜色信息来获取工厂。
choice){if(choice.equalsIgnoreCase(SHAPE)){return
if(choice.equalsIgnoreCase(COLOR)){return
AbstractFactory通过传递类型信息来获取实体类的对象。
AbstractFactoryPatternDemo.java
FactoryProducer.getFactory(SHAPE);//获取形状为
shapeFactory.getShape(CIRCLE);//调用
shapeFactory.getShape(RECTANGLE);//调用
shapeFactory.getShape(SQUARE);//调用
方法shape3.draw();//获取颜色工厂AbstractFactory
FactoryProducer.getFactory(COLOR);//获取颜色为
colorFactory.getColor(RED);//调用
colorFactory.getColor(GREEN);//调用
colorFactory.getColor(BLUE);//调用
解耦抽象工厂模式有助于降低客户端与具体实现之间的耦合度从而提高系统的可扩展性和可维护性。
灵活性抽象工厂模式使得系统更加灵活可以轻松地添加或删除产品族而无需修改客户端代码。
易于测试由于具体实现与客户端代码的解耦使得测试变得更加容易可以更容易地模拟和验证各种不同的工厂实现。
多等级产品抽象工厂模式可以支持多等级的产品每个等级可以有自己的工厂实现从而实现更细粒度的控制和配置。
当一个产品族中的多个对象被设计成一起工作时它能保证客户端始终只使用同一个产品族中的对象
代码复杂度增加使用抽象工厂模式需要编写更多的代码和接口这可能会增加代码的复杂度和开发时间。
违反开闭原则在抽象工厂模式中如果要添加一个新的产品族需要修改抽象工厂接口及其所有子类这违反了开闭原则即软件实体应该对扩展开放对修改封闭。
过度抽象抽象工厂模式可能会导致过度抽象使得系统变得更加复杂和难以理解。
具体实现依赖如果具体实现依赖于抽象工厂那么它们之间的耦合度仍然很高这可能会限制系统的灵活性和可维护性。
当需要创建的对象是一系列相互关联或相互依赖的产品族时如电器工厂中的电视机、洗衣机、空调等。
系统中有多个产品族但每次只使用其中的某一族产品。
如有人只喜欢穿某一个品牌的衣服和鞋。
系统中提供了产品的类库且所有产品的接口相同客户端不依赖产品实例的创建细节和内部结构。
抽象工厂模式是工厂方法模式的升级版工厂方法模式只生产一个等级的产品而抽象工厂模式可生产多个等级的产品。
抽象工厂模式实现对产品家族的创建一个产品家族是这样的一系列产品具有不同分类维度的产品组合采用抽象工厂模式则是不需要关心构建过程只关心什么产品由什么工厂生产即可。
建造者模式则是要求按照指定的蓝图建造产品它的主要目的是通过组装零配件而产生一个新产品。
如果将抽象工厂模式看成汽车配件生产工厂生产一个产品族的产品那么建造者模式就是一个汽车组装工厂通过对部件的组装可以返回一辆完整的汽车。
本文是博主的粗浅理解可能存在一些错误或不完善之处如有遗漏或错误欢迎各位补充谢谢
如果觉得这篇文章对您有所帮助的话请动动小手点波关注你的点赞收藏⭐️转发评论都是对博主最好的支持~
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback