工厂模式三部曲之三_抽象工厂模式(附三部曲源码)
抽象工厂模式是对工厂模式的进一步抽象,是工厂模式中最为抽象和最具一般性的一种形态,提供了创建一系列相关或者相互依赖对象的接口,而无需指定他们的类型。
如果你对工厂模式还有些迷惑的,可以回顾下工厂模式的内容:《工厂模式三部曲之二_工厂模式》 。
下面直接引用园中某位博友运用的实例进行讲解:
设计目标:实现针对多种成套产品的生产,每套产品有多种不同等级结构的物品组成。
【分析】
抽象产品:虚拟课桌 虚拟椅子
具体产品:木课桌 铁课桌;木椅子 铁椅子
抽象工厂:要生产产品的基类:抽象产品
具体工厂:木工厂=》木桌子,木椅子 铁工厂=》铁桌子,铁椅子
角色分析好了就直接进入代码部分:
抽象工厂类:
2 public abstract class Factory
3 {
4 public abstract Desk CreateDesk();
5 public abstract Chair CreateChair();
6 }
该类中定义了两个抽象方法,一个用来生产桌子,一个用来成产椅子
具体工厂类:
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 }
抽象工厂是用来生产一系列相关产品,这里的桌子分木桌子和铁桌子,这两种桌子就是相关产品,同理,木椅子和铁椅子也是相关产品,所以具体工厂分为了木制工厂和铁制工厂,分别用来生产木质产品和铁质产品,所以这里工厂重写了抽象工厂中的抽象方法,分别创建了某种材质的实例。
抽象产品类:
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 }
工厂模式是一个抽象工厂一个抽象产品,抽象工厂模式是多个抽象工厂多个抽象产品。
具体产品类:
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 }
具体产品分系列,有铁质系列和木质系列两种,产品分别是桌子椅子。
客户端:
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
工厂模式三部曲之三_抽象工厂模式(附三部曲源码)相关推荐
- Java设计模式-工厂模式(3)抽象工厂模式
在Java设计模式-工厂模式(2)工厂方法模式 我们知道了工厂方法模式解决了简单工厂模式中的缺陷,做到了满足开闭原则,但是时代是进步的,进而又产生新的问题,工厂难道只能生产一种东西吗.我们所见到的工厂 ...
- 抽象工厂和工厂方法示例_抽象工厂设计模式示例
抽象工厂和工厂方法示例 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式如此 ...
- 自动化测试如何保持登录状态_自动化测试po模式是什么?自动化测试po分层如何实现?-附详细源码...
一.什么是PO模式 全称:page object model 简称:POM/PO PO模式最核心的思想是分层,实现松耦合!实现脚本重复使用,实现脚本易维护性! 主要分三层: 1.基础层BasePage ...
- 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文)
1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程+答辩论文) 文章目录 1-基于单片机的城市轨道交通列车超速防护系统_里程表设计(原理图+PCB+源码+仿真工程 ...
- beautifulsoup解析动态页面div未展开_实战|Python轻松实现动态网页爬虫(附详细源码)...
用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识.项目背景事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码)&g ...
- python 自动化微信小程序_干货 | 微信小程序自动化测试最佳实践(附 Python 源码)...
原标题:干货 | 微信小程序自动化测试最佳实践(附 Python 源码) 本文为霍格沃兹测试学院测试大咖公开课<微信小程序自动化测试>图文整理精华版. 随着微信小程序的功能和生态日益完善, ...
- 天天有毒_鸡汤文案类小程序源码
简介: 天天有毒_鸡汤文案类小程序源码 网盘下载地址: http://kekewl.net/oi8WRaw46rq0 图片:
- html圣诞树代码_支持手机选择背景音乐圣诞树源码
html圣诞树代码_支持手机选择背景音乐圣诞树源码小子在本地测试了下,圣诞树会根据音乐变化起来,挺好看的手机打开显示黑屏的问题,已经修复适配,上传服务器即可,如果加载慢就把远程js和css本地化或者更 ...
- python和苹果_苹果手机评论情感分析(附python源码和评论数据)
原标题:苹果手机评论情感分析(附python源码和评论数据) 首先抓取网页上的数据,每一页十条评论,生成为一个txt文件. 数据链接 回复公众号 datadw 关键字"苹果"获取. ...
最新文章
- SqlServer 数据分页
- 商品微服务添加api接口
- (转)C#开发微信门户及应用(5)--用户分组信息管理
- 用户不在sudoers文件中,需要使用命令 sudo npm install 的解决方法
- express 项目文件目录说明及功能描述
- 如何将英文PDF翻译成中文且格式不变?(PDF免费翻译攻略)
- VMware16安装Win10系统图文教程
- Genlovy_Hoo大神的杰作
- nyoj 779 兰州烧饼
- 计算机无法识别游戏手柄,windows10系统下游戏手柄无法识别或工作怎么解决
- 徐佐君:智慧园区网络 开放使能共赢
- Python基础03-基本数据类型
- 一行代码就可以替换n个仓储文件
- IT行业是吃青春饭的吗?
- datatable隐藏列设置及获取隐藏列的值
- 九章量子计算机属于专用计算机吗,九章“问世”了 你知道什么是量子计算机吗?...
- SSH和文件传输(SCP)
- C++(标准库):26---STL迭代器之(迭代器的5大种类(输出迭代器、输入迭代器、向前迭代器、双向迭代器、随机访问迭代器))
- 2022年“研究生科研素养提升”系列公益讲座在线测评,60分及格,每人有一次补考机会。
- Flink 最锋利的武器:Flink SQL 入门和实战带你了解NBA球星数据
热门文章
- DB9针和DB25针串口的引脚定义
- 梦幻诛仙手游服务器维护中,《梦幻诛仙手游》12月20日凌晨5点~8点停服维护公告...
- python兼职真的太赚钱了,今天女神节给脑婆赚了3000零花钱
- 修改host文件,遇到没有管理员权限,怎么办?
- 找茬小程序源码、看图找不同小程序,前端+后端+教程,微信小程序游戏一起来找茬,全网首发一款可以完美运营的找茬小程序源码
- 为什么你的60%的时间都被浪费了?——一场7天重塑大脑的专注力实验
- 视频教程-赵强老师:大数据从入门到精通(15)Storm-大数据
- LeetCode 257 Binary Tree Paths
- 五月的仓颉大神写的 三年java程序员面试感悟 值得分享给大家
- sharepoint页面嵌入_Part 1: 如何把Power BI 嵌入到sharepoint 网站