【设计模式】简单工厂模式、工厂方法模式和抽象工厂模式区别与联系

设计模式总结链接


简单工厂模式、工厂方法模式和抽象工厂模式都是设计模式中创建型的经典方法,各有千秋,各有用物之地啊。

简单工厂,主要用生产对象不能抽象为一个类,或者是面向较小的群体没有必要进行抽象封装。说白了就是通过简单的方法就能搞定,何必要大费周章呢。能见但就简单,在允许的情况下尽可能的简单,方便。
详解简单工厂模式点这里

工厂方法模式,可以说是简单工厂模式的一个进阶,能够完成对某一类对象的生产,当然这类对象需要成像承接口。当然允许既可以生产水果,又可以生产蔬菜的工厂类(一个工厂生产两种东西,这是允许的)。
因为抽象成生产某一类对象了,比如生产水果,对于是生产香蕉,苹果,还是西瓜都一视同仁了,再扩展生产 弥胡桃等都很方便。
详解工厂方法模式

抽象工厂模式,是对工厂的一个抽象,一个工厂可以生产多类对象,将其抽象为一个抽象工厂,便于调用,同时扩展性得到了很好的提高。
详解抽象工厂模式


举个例子:

简单工厂能完成的场景

生产需求:生产一个杂牌子车子,只要能跑起来就行。
生产的工厂:于是,找了个比较山寨的工厂,既能生产宝马的车轮,也能生产奔驰的发动机(山寨啊,哈哈),组装起来还行,能用,就是有点不舒服。
扩展:不舒服那就要改点东西,假设换个轮子,原装宝马的轮子,这时只需要去工厂方法生产轮子的地方把生产轮子的方法改一下,改成生产原装宝马轮子(简单工厂方法已经实现了,使用和创建之间的解耦,所以改动较小
不适用情况:需求比较苛刻需要对同类产品多次扩展,经常更换零件,假设又要更换发动机了,过两天又要换。


工厂方法模式能完成的场景

生产需求:生产一个组装车,需要经常更换某个部件
生产工厂:专业造宝马牌轮子,专业造宝马牌发动机,只要是想要的宝马牌轮子和发动机均可制作,任由用户挑选(由于对产品进行抽象,所以生产什么已经不重要了
扩展:向生产不同型号的宝马牌轮子,或者宝马牌发动机均可通过本类完成扩展,
不适应情况:想要生产奔驰牌的东西,没办法生产。


抽象工厂模式能完成的场景

生产需求:任何组装车,均可满足生产
生产工厂:汽车零件制作工厂,可以制作任何牌子的任何零件,任由用户选择,自由组合。(汽车零件制作工厂,汽车零件是什么?什么都不是,只是一个抽象的概念而已,程序中就是以抽象类形式出现
扩展:可以完成对车子任意零件的任意更换。
不适应情况:基本上没了。要是有那就那就有新的模式。因为,抽象工厂,已经对所有类进行抽象了。


根据抽象程度可以很明显看出三者差异。

简单工厂模式:几乎没有做抽象,这是对创建和使用进行了简单的解耦。
工厂方法模式:只是对生产的对象进行了抽象处理,能够适应一类对象的生产,比起简单工厂,扩展性更强。
抽象工厂模式:是在工厂方法模式上对工厂进一步抽象,基本上实现了对所有实类的抽象,抽象层次最高。

鼠小 CSDN认证博客专家 一个萌汉子
未来的路是黑的,我不知道怎么走,我需要做的就是先走着。https://smallzheng.blog.csdn.net/
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页