搜故事,从300万个故事到海量知识百科的华丽转变!
搜故事 > 小故事 > 正文

设计模式篇——工厂模式详解

时间:2009-11-20

东汉风俗通记录了这样一则神话故事:开天辟地,未有人民,女娲搏黄土做人,说的就是女娲造人的故事

提示:本文共有 1766 个字,阅读大概需要 4 分钟。

神话故事——女娲造人

在介绍工厂模式之前,我们先来看一个女娲造人的神话故事。东汉《风俗通》记录了这样一则神话故事:“开天辟地,未有人民,女娲搏黄土做人”,说的就是女娲造人的故事。女娲是如何造人的呢?过程大概是这样的:首先,女娲采集黄土捏成人的形状,然后放到八卦炉中烧制,最后放到大地上生长。由于女娲是第一次做人,经验不足,对火候的把控不准确,柴火放多了,火太旺,七七四十九天之后,造好拿出来一看,人都被烤黑了,于是,黑种人就诞生了;然后女娲开始少放柴火,小火慢炖,又过了七七四十九天,拿出来一看,人还没烤熟呢,于是,白种人就诞生了;最后,女娲有经验了,把控好火的大小,就这样又过了七七四十九天,打开八卦炉一看,嗯,这次就对了,于是黄种人就诞生了。

那我们可以用程序来实现这个有意思的女娲造人功能吗?可以实现!接下来,我们就通过工厂模式来实现女娲造人这个功能。

工厂模式

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。它是创建行模式。

工厂模式有三种:简单工厂模式、工厂方法模式和抽象工厂模式。接下来我们用这三种工厂模式分别实现女娲造人程序。

简单工厂模式

Java是面向对象的语言编程,要用程序实现女娲造人,我们要先确定好有哪些对象。经过分析,该过程涉及三个对象:女娲、八卦炉和三种肤色的人。女娲相当于调用方Client,八卦炉相当于生产人的工厂,三种肤色的人肯定都是人类,所以我们定义一个人类接口,让三种肤色的人实现这个接口。分析完毕,我们画出了如下的类图:

HumanFactory是一个创建人类的工厂(八卦炉),它有一个创建人类的方法 createHuman,具体创建什么肤色的人来根据方法的入参决定。它们的源码如下。

人类及其实现类代码如下:

工厂类代码:

一切准备就绪,女娲就可以开始造人了:

执行结果如下:

以上就是我们通过简单工厂模式实现的女娲造人的小程序,非常简单。

简单工厂模式的优缺点

简单工厂模式的优点:将对象的创建交给专门的工厂类负责,实现了对象的创建和对象的使用分离。

简单工厂模式的缺点:工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,比如都看过X战警吧,里面的魔形女是绿皮肤,上面的工厂类显然满足不了,需要增加一个 if 判断分支才能支持。而且当产品类型较多时,简单工厂的 if 判断将会非常多,不容易维护。

工厂方法模式

工厂方法模式的定义为:定义一个用于创建对象的接口或抽象类,让子类决定实例化哪一个类。

我们来画一下工厂方法模式下,女娲造人的类图:

其中,Human接口及其子类的代码不变,增加了一个抽象工厂AbstractHumanFactory,里面定义了一个造人的方法 createHuman(),具体创造什么类型的人由其子工厂实现。

抽象工厂类及其子工厂类如下:

女娲造人的方式如下:

执行之后发现结果不变。

工厂方法模式的优缺点

工厂方法模式的优点:遵循了开闭原则,扩展性极强。比如现在要增加一个绿皮肤的人类,我们只需要增加一个创建绿皮肤人类的工厂,这个工厂继承自抽象工厂即可,不需要改变原有代码,可维护性高。

工厂方法模式的缺点:增加了类的数量,当有成千上万个类型的产品时,就需要有成千上万个工厂类来生产这些产品。

抽象工厂模式

在工厂方法模式中,一个具体的工厂负责生产一类具体的产品,即一对一的关系,但是,如果需要一个具体的工厂生产多种产品对象,比如,生产不同肤色的男人和女人,那么就需要用到抽象工厂模式了。我们重新设计下这个功能的类图:

抽象工厂我们定义了两个方法,createMan() 和 createWoman()用来表示生产男人和女人,不管男人或女人,都有不同的肤色,所以我们定义了三个子工厂用来创建不同肤色的人(包括男人和女人),这三个子工厂重写了父类工厂的两个方法。具体实现代码如下。

Human接口及其两个实现类:

三种肤色的男人和女人:

抽象工厂代码:

具体工厂代码:

女娲使用工厂创造人类:

OK,女娲使用抽象工厂模式造人完成。

抽象工厂模式的优缺点

抽象工厂模式的优点:增加固定类型产品的不同具体工厂比较方便。例如现在女娲要创造一个绿皮肤的人,只需要再创建一个绿皮肤人的工厂继承抽象工厂就可以了。

抽象工厂模式的缺点:类图优点复杂,可读性没有工厂方法模式那么好。

点个关注吧,我会持续更新~~

看到此处说明本文对你还是有帮助的,关于“设计模式篇——工厂模式详解”留言是大家的经验之谈相信也会对你有益,推荐继续阅读下面的相关内容,与本文相关度极高!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
相关阅读
设计模式之禅带书签文字版第2版.pdf

设计模式之禅带书签文字版第2版.pdf

模式,定义,最佳实践,应用,原则,策略,命令,设计模式,中介者,工厂,方法,观察者模式,开闭,责任,适配器,代理模式,装饰模式,原型,备忘录,混编,访问者,门面,单例模式,工厂模式,模板方法,状态模式,小结,桥梁,迭代器,解释器

2020-06-01 #故事大全

正版 设计模式之禅第2版 设计模式著作秦小波 程序员/计算机入书籍 计算机程序应用

正版 设计模式之禅第2版 设计模式著作秦小波 程序员/计算机入书籍 计算机程序应用

设计模式,正版,书籍,工程,价格,图片,品牌,机械,报价,程序员,著作,计算机,开发项目管理,第2版,计算机程序,图书音像,专营店,应用,苏宁易购,诺森

2020-08-19 #故事会在线阅读

设计模式之禅

设计模式之禅

工作,信息,学生,心态,精神,生活,急功近利,于小楼,比别,上时,京东商城,和发,多灵,若水,作者,从头到脚,东西,一角,世俗,人们,中体,个人,习惯,书架上,书本,价值,伪饰,会生,价格,总能

2020-07-05 #短篇故事

幼儿园“口才”特色课程的活动设计模式探究

幼儿园“口才”特色课程的活动设计模式探究

幼儿,口才,老师,课程,表演,游戏,故事,教师,妈妈,宝宝,爸爸,头饰,孩子们,小鸡,幼儿园,教具,诗歌,训练,中班,内容,学生,孩子,小学生,教学,狐狸,表演家,语言,到现在,小动物,小朋友们

2020-07-10 #故事会在线阅读

幼儿园“口才”特色课程的活动设计模式探究

幼儿园“口才”特色课程的活动设计模式探究

幼儿,口才,老师,课程,表演,游戏,故事,教师,妈妈,宝宝,爸爸,头饰,孩子们,小鸡,幼儿园,教具,诗歌,训练,中班,内容,学生,孩子,小学生,教学,狐狸,表演家,语言,到现在,小动物,小朋友们

2015-08-08 #小故事

从“说一个好的故事”到展示设计教学模式探索

从“说一个好的故事”到展示设计教学模式探索

合作,让学生,中培,摘要,亮点,作品,优势互补,发挥特长,学生,团队精神,学会,形式,成果,课程,教学模式,教学,风采,汇报,设计,探索教学,实施过程,团队合作,和答辩,好的故事,展示设计

2020-09-26 #故事会

LOL设计师:年内会推出自选英雄的新模式 事件将会有更多故事

LOL设计师:年内会推出自选英雄的新模式 事件将会有更多故事

事件,玩家,故事,活动,英雄,对局,游戏,任务,设计师,拉克,游戏模式,事情,宇宙,时间,方式,框架,每项,职业,黑夜,事件中,有更多,降低到,克丝,拳头,主题,位置,代币,云顶,偏好,信号

2011-03-30 #短篇故事

浅谈基于信息化平台的中职幼儿教师口语教学模式——以“讲故事训练”教学设计为例

浅谈基于信息化平台的中职幼儿教师口语教学模式——以“讲故事训练”教学设计为例

教学,口语,技术,信息化资源,网络信息化,墨云,摘要,信息,传统,专业技能,幼儿教师,双方,关键词,分类号,内图,实用性,学科,基金,平台,弊病,时代,时空,笔者,课堂,针对性,资源,合作,突破,中利用,快速发展

2020-08-10 #经典故事