设计模式-工厂模式/抽象工厂模式/简单工厂模式

  1. 原始模式:在自己的业务函数中创建对象。但是对于某些创建过程过于复杂的类而言,加大了客户端的压力。
  2. 简单工厂模式:用于将参数传给工厂类,工厂依据参数创建对象给用户。
模式中含有的角色:
工厂:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口
具体产品::简单工厂模式所创建的具体实例对象。


优点:
1. 客户端和具体实现类解耦
2. 不用考虑创建过程过于复杂的对象创建
缺点:
1. 由于传递参数给工厂,因此,增加功能是通过修改源码实现的
    工厂中会包含大量if/else语句
2. 工厂类的职责过重,即创建不同的对象,使得该工厂类耦合度太高

适用场景:
1. 工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。
2. 客户端只知道传入工厂类的参数,对于如何创建对象并不关心。
  1. 工厂方法模式:将生产对象的工厂进行抽象,每个具体的工厂只生产一种对象。简单工厂模式+“开闭原则”=工厂方法模式
模式中的角色:
抽象工厂:工厂方法模式的核心,任何工厂类都必须实现这个接口。
具体工厂:具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
抽象产品:工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品:工厂方法模式所创建的具体实例对象。

优点:
1. 不需要记住具体类名,甚至连具体参数都不用记忆。
2. 实现了对象创建和使用的分离。
3. 系统的可扩展性也就变得非常好,无需修改接口和原类。
缺点:
1. 增加系统中类的个数,复杂度和理解度增加。
2. 增加了系统的抽象性和理解难度。

适用场景:
1. 客户端不知道它所需要的对象的类。
2. 抽象工厂类通过其子类来指定创建哪个对象。
  1. 抽象工厂模式:抽象工厂用于将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产。
产品族:指同一产地或厂商的不同产品
产品等级:指同一功能,产地或厂商不同的产品

例如:
中国生产:梨,香蕉,苹果
美国生产:梨,香蕉,苹果
日本生产:梨,香蕉,苹果
一行看作一个产品组
一列看作一个产品等级

由于工厂模式一个对象需要一个工厂,这将会使得工厂类过于繁多
于是,抽象工厂针对各个产品簇来实例化具体工厂
抽象工厂:
        中国工厂:
                产梨
                产苹果
                产香蕉
        美国工厂:
                产梨
                产苹果
                产香蕉
        日本工厂:
                产梨
                产苹果
                产香蕉

抽象苹果:
        中国苹果
        美国苹果
        日本苹果
抽象香蕉:
        中国香蕉
        美国香蕉
        日本香蕉
抽象梨:
        中国梨
        美国梨
        日本梨

优点:
1. 拥有工厂方法模式的优点
2. 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
3 增加新的产品族很方便,无须修改已有系统,符合“开闭原则”。
缺点:
1. 增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了“开闭原则”。

适用场景:
(1) 系统中有多于一个的产品族。而每次只使用其中某一产品族。可以通过配置文件等方式来使得用户可以动态改变产品族,也可以很方便地增加新的产品族。
(2) 产品等级结构稳定。设计完成之后,不会向系统中增加新的产品等级结构或者删除已有的产品等级结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值