设计模式------工厂模式的学习

一、什么是工厂模式:

工厂模式将目的将创建对象的具体过程屏蔽隔离起来,从而达到更高的灵活性,工厂模式可以分为三类:

  • 简单工厂模式(Simple Factory)
  • 工厂方法模式(Factory Method)
  • 抽象工厂模式(Abstract Factory)

通过一个案例来对工厂模式进行一个简单初步的理解
(1)在没有工厂的时代,如果客户需要一款宝马车,那么就需要客户去创建一款宝马车,然后拿来用。
(2)简单工厂模式:后来出现了工厂,用户不再需要去创建宝马车,由工厂进行创建,想要什么车,直接通过工厂创建就可以了。比如想要320i系列车,工厂就创建这个系列的车。
(3)工厂方法模式:为了满足客户,宝马车系列越来越多,如320i、523i等等系列,一个工厂无法创建所有的宝马系列,于是又单独分出来多个具体的工厂,每个具体工厂创建一种系列,即具体工厂类只能创建一个具体产品。但是宝马工厂还是个抽象,你需要指定某个具体的工厂才能生产车出来。
(4)抽象工厂模式:随着客户要求越来越高,宝马车必须配置空调,于是这个工厂开始生产宝马车和需要的空调。最终是客户只要对宝马的销售员说:我要523i空调车,销售员就直接给他523i空调车了。而不用自己去创建523i空调车宝马车。

工厂模式的目的:将创建对象的具体过程屏蔽隔离起来

二、简单工厂模式:

定义一个创建对象的工厂接口,将对象的创建和本身的业务逻辑分离,用户要买宝马只需要告诉工厂宝马的型号即可,
优点:
客户端不需知道所创建的具体产品类的类名以及创建过程,只需知道具体产品类所对应的参数即可(哪个型号)
缺点:
每次添加新产品就需要修改工厂类。在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展维护,
并且工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。

三、工厂方法模式:

于简单工厂模式不同在于,在简单工厂的基础上,给工厂类新加了一个接口,用户要买宝马只需要告诉工厂接口,是哪个工厂即可
优点:
每增加新产品,只需增加该产品以及对应的具体实现工厂类,由具体工厂类决定要实例化的产品是哪个,
将对象的创建与实例化延迟到子类,这样工厂的设计就符合“开闭原则”了,扩展时不必去修改原来的代码。
在使用时,用户只需知道产品对应的具体工厂,无需具体的创建过程,甚至不需要知道具体产品类的类名,
当我们选择哪个具体工厂时,就已经决定了实际创建的产品是哪个了。
缺点:
每增加一个产品都需要增加一个具体产品类和实现工厂类,使得系统中类的个数成倍增加,
在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

四、抽象工厂模式:

在工厂方法模式中,我们使用一个工厂创建一个产品,一个具体工厂对应一个具体产品,
但有时候我们需要一个工厂能够提供多个产品对象,而不是单一的对象,这个时候我们就需要使用抽象工厂模式。
比如:汽车并不是由一个汽车工厂造出来的,而是由多个工厂,如发动机工厂,空调工厂等等共同造出来的
所以:抽象工厂就是在工厂方法的基础上,将一个工厂接口,变成了多个工厂接口,并提供一个抽象接口给来工厂接口去继承
优点:
用户不需要明确指定具体生成类;所有的具体工厂都实现了抽象工厂中定义的公共接口,
因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。
缺点:
但该模式的缺点在于添加新的行为时比较麻烦,如果需要添加一个新工厂对象时(沙发工厂),
需要更改接口及其下所有子类,这必然会带来很大的麻烦。

五、工厂方法模式与抽象工厂模式的区别在于:

(1)工厂方法只有一个抽象产品类和一个抽象工厂类,但可以派生出多个具体产品类和具体工厂类,每个具体工厂类只能创建一个具体产品类的实例。
(2)抽象工厂模式拥有多个抽象产品类(产品族)和一个抽象工厂类,每个抽象产品类可以派生出多个具体产品类;抽象工厂类也可以派生出多个具体工厂类,同时每个具体工厂类可以创建多个具体产品类的实例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值