简单工厂模式、工厂方法模式、抽象工厂模式的区别

今天开始学习设计模式中的三种工厂模式,看了不少博客验证自己的想法,最后分享一下自己的理解。(以下无代码,建议结合其他博客的示例看)

首先最重要的是理解这里“工厂”的含义。设计模式的“工厂”和笔者理解的日常生活中的“工厂”是有差异的(如果你理解中没有差异可以略过这一段)。为了区分,以下设计模式的“工厂”称“设工厂”,日常生活中的“工厂”称“日工厂“。笔者认为生活中自己生产产品和“日工厂”生产产品的主要区别在于个人生产不出来,或者效率低下,就是说“日工厂”的核心在于生产效率高。但是对于计算机来说,无论在哪里生产都是同一台电脑在跑,“设工厂”不存在效率差异

那么“设工厂”的核心优势是什么?笔者认为是提供想要的对象,这句话很不知所云,接下来就从三种工厂模式解释下什么叫提供想要的对象。

简单工厂模式

一句话概括简单工厂模式就是:一个工厂根据不同输入参数输出不同的对象(可以是同基类的对象也可以不是)。这有什么用呢?用处在于通过一层封装,输入的参数和输出的对象之间的关系是自定义,且随时可以更改(极端点,比如你输入汽车,我可以返回飞机)。而new对象就把输入和输出绑死了(new汽车不可能得到飞机)。比如安卓中的BitmapFactory就是简单工厂。

但是简单工厂模式也有它的缺点,每次增加新对象的时候就要修改工厂定义来支持新对象。问题出在哪里?答案很粗暴,一个工厂不够用。

工厂方法模式

一句话概括工厂方法模式就是:一类工厂,其中每个只输出一类对象(一类对象是因为多态)。工厂方法模式和简单工厂模式的区别有两点:简单工厂模式只有一个工厂,工厂方法模式却有一类工厂;简单工厂模式输出的对象可以不是同一个基类,工厂方法模式输出的对象必须是同一个基类(原因留到抽象工厂模式再说)。

工厂方法模式使用过程是这样的,想new一个对象,先new对应的工厂,在让工厂new对象,这不是脱裤子放屁吗?原因在于,如果需要new很多对象,先new工厂的好处在于new哪个对象由new工厂的时候就决定了,如果要换对象,只要换一个工厂就可以了,不必处处去换对象。相比简单工厂模式的优点在于,如果要增加新对象,只需要新添加工厂,而不必修改原工厂的定义。

抽象工厂模式

一句话概括抽象工厂模式就是:一类工厂,其中每个输出多个一类对象(对象种类是二维的)。抽象工厂模式实际上就是简单工厂模式和工厂方法模式的结合体。

抽象工厂模式的使用场景一般是,我不仅仅想要new一个对象,而是想new很多对象,而且这些对象之间是有关系的(比如红色的衣服和红色的水杯,或者蓝色的衣服和蓝色的水杯),这时候就可以先创建一个蓝色的工厂,蓝色的工厂再创建蓝色的衣服和蓝色的水杯。

总结

笔者了解这三种工厂模式的感想就是,模式是为实际需求服务的,了解设计模式可以开阔视野,但是设计模式不是死的,使用中不必完全按定义,可以灵活变通出其他变种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值