抽象工厂模式是对工厂模式的进一步抽象,是工厂模式中最为抽象和最具一般性的一种形态,提供了创建一系列相关或者相互依赖对象的接口,而无需指定他们的类型。

如果你对工厂模式还有些迷惑的,可以回顾下工厂模式的内容:《工厂模式三部曲之二_工厂模式》 。

下面直接引用园中某位博友运用的实例进行讲解:

生活场景:某家具厂为学校生产课桌和座椅,开始只生产木质的课桌和座椅,后来经学校要求,又开始为学校生产铁质的课桌和座椅。
设计目标:实现针对多种成套产品的生产,每套产品有多种不同等级结构的物品组成。
【分析】
抽象产品:虚拟课桌 虚拟椅子
具体产品:木课桌 铁课桌;木椅子 铁椅子
抽象工厂:要生产产品的基类:抽象产品
具体工厂:木工厂=》木桌子,木椅子   铁工厂=》铁桌子,铁椅子

角色分析好了就直接进入代码部分:

抽象工厂类:

抽象工厂

1     //抽象工厂:生产课桌 生产椅子
2     public abstract class Factory
3     {
4         public abstract Desk CreateDesk();
5         public abstract Chair CreateChair();     
6     }

该类中定义了两个抽象方法,一个用来生产桌子,一个用来成产椅子

具体工厂类:

具体工厂

 1     //具体工厂(木质产品工厂)
 2     public class WoodFactory : Factory
 3     {
 4         //木桌子
 5         public override Desk CreateDesk()
 6         {
 7             return new WoodDesk();
 8         }
 9 
10         //木椅子
11         public override Chair CreateChair()
12         {
13             return new WoodChair();
14         }
15     }
16 
17     //具体工厂(铁质产品工厂)
18     public class IronFactory : Factory
19     {
20         //铁桌子
21         public override Desk CreateDesk()
22         {
23             return new IronDesk();
24         }
25 
26         //铁椅子
27         public override Chair CreateChair()
28         {
29             return new IronChair();
30         }
31     }

抽象工厂是用来生产一系列相关产品,这里的桌子分木桌子和铁桌子,这两种桌子就是相关产品,同理,木椅子和铁椅子也是相关产品,所以具体工厂分为了木制工厂和铁制工厂,分别用来生产木质产品和铁质产品,所以这里工厂重写了抽象工厂中的抽象方法,分别创建了某种材质的实例。

抽象产品类:

抽象产品

 1     //抽象产品A:课桌
 2     public abstract class Desk
 3     {
 4         public abstract void ProductDesk(); 
 5     }
 6     //抽象产品B:椅子
 7     public abstract class Chair
 8     {
 9        public abstract void ProductChair();
10     }

工厂模式是一个抽象工厂一个抽象产品,抽象工厂模式是多个抽象工厂多个抽象产品。

具体产品类:

具体产品

 1     //具体产品A_1:木课桌
 2     public class WoodDesk : Desk
 3     {
 4         public override void ProductDesk()
 5         {
 6             Console.WriteLine("Wood Desk.......");
 7         }
 8     }
 9 
10     //具体产品A_2:铁课桌
11     public class IronDesk : Desk
12     {
13         public override void ProductDesk()
14         {
15             Console.WriteLine("Iron Desk.......");
16         }
17     }
18 
19     //具体产品B_1:木椅子
20     public class WoodChair : Chair
21     {
22         public override void ProductChair()
23         {
24             Console.WriteLine("Wood Chair......");
25         }
26     }
27 
28     //具体产品B_2:铁椅子
29     public class IronChair : Chair
30     {
31         public override void ProductChair()
32         {
33             Console.WriteLine("Iron Chair.......");
34         }
35     }

具体产品分系列,有铁质系列和木质系列两种,产品分别是桌子椅子。

客户端:

客户端

 1     //客户端
 2     class Program
 3     {
 4         static void Main(string[] args)
 5         {
 6             //要求木桌子
 7             Desk desk = new WoodFactory().CreateDesk();
 8             desk.ProductDesk();
 9 
10             //要求铁椅子
11             Chair chair = new IronFactory().CreateChair();
12             chair.ProductChair();
13 
14             Console.ReadKey();
15 
16         }
17     }

运行效果:

附上三部曲的所有源码:/Files/holyknight-zld/工厂模式/工厂模式三部曲.rar

转载于:https://www.cnblogs.com/holyknight-zld/archive/2012/09/06/AbstractFactory.html

工厂模式三部曲之三_抽象工厂模式(附三部曲源码)相关推荐

  1. Java设计模式-工厂模式(3)抽象工厂模式

    在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...

  2. 抽象工厂和工厂方法示例_抽象工厂设计模式示例

    抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...

  3. 自动化测试如何保持登录状态_自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码...

    一.什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage ...

  4. 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)

    1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文) 文章目录 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程 ...

  5. beautifulsoup解析动态页面div未展开_实战|Python轻松实现动态网页爬虫(附详细源码)...

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.项目背景事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码)&g ...

  6. python 自动化微信小程序_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...

    原标题:干货 | 微信小程序自动化测试最佳实践(附 Python 源码) 本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善, ...

  7. 天天有毒_鸡汤文案类小程序源码

    简介: 天天有毒_鸡汤文案类小程序源码 网盘下载地址: http://kekewl.net/oi8WRaw46rq0 图片:

  8. html圣诞树代码_支持手机选择背景音乐圣诞树源码

    html圣诞树代码_支持手机选择背景音乐圣诞树源码小子在本地测试了下,圣诞树会根据音乐变化起来,挺好看的手机打开显示黑屏的问题,已经修复适配,上传服务器即可,如果加载慢就把远程js和css本地化或者更 ...

  9. python和苹果_苹果手机评论情感分析(附python源码和评论数据)

    原标题:苹果手机评论情感分析(附python源码和评论数据) 首先抓取网页上的数据,每一页十条评论,生成为一个txt文件. 数据链接 回复公众号 datadw 关键字"苹果"获取. ...

最新文章

  1. SqlServer 数据分页
  2. 商品微服务添加api接口
  3. (转)C#开发微信门户及应用(5)--用户分组信息管理
  4. 用户不在sudoers文件中,需要使用命令 sudo npm install 的解决方法
  5. express 项目文件目录说明及功能描述
  6. 如何将英文PDF翻译成中文且格式不变?(PDF免费翻译攻略)
  7. VMware16安装Win10系统图文教程
  8. Genlovy_Hoo大神的杰作
  9. nyoj 779 兰州烧饼
  10. 计算机无法识别游戏手柄,windows10系统下游戏手柄无法识别或工作怎么解决
  11. 徐佐君:智慧园区网络 开放使能共赢
  12. Python基础03-基本数据类型
  13. 一行代码就可以替换n个仓储文件
  14. IT行业是吃青春饭的吗?
  15. datatable隐藏列设置及获取隐藏列的值
  16. 九章量子计算机属于专用计算机吗,九章“问世”了 你知道什么是量子计算机吗?...
  17. SSH和文件传输(SCP)
  18. C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))
  19. 2022年“研究生科研素养提升”系列公益讲座在线测评,60分及格,每人有一次补考机会。
  20. Flink 最锋利的武器:Flink SQL 入门和实战带你了解NBA球星数据

热门文章

  1. DB9针和DB25针串口的引脚定义
  2. 梦幻诛仙手游服务器维护中,《梦幻诛仙手游》12月20日凌晨5点~8点停服维护公告...
  3. python兼职真的太赚钱了,今天女神节给脑婆赚了3000零花钱
  4. 修改host文件,遇到没有管理员权限,怎么办?
  5. 找茬小程序源码、看图找不同小程序,前端+后端+教程,微信小程序游戏一起来找茬,全网首发一款可以完美运营的找茬小程序源码
  6. 为什么你的60%的时间都被浪费了?——一场7天重塑大脑的专注力实验
  7. 视频教程-赵强老师:大数据从入门到精通(15)Storm-大数据
  8. LeetCode 257 Binary Tree Paths
  9. 五月的仓颉大神写的 三年java程序员面试感悟 值得分享给大家
  10. sharepoint页面嵌入_Part 1: 如何把Power BI 嵌入到sharepoint 网站