目录
一、简单工厂模式
一、其角色有
1、抽象产品
2、具体产品
3、具体工厂
4、产品使用者
二、解析
自我理解:简单工厂模式适用于业务简单的情况下或者具体产品很少增加的情况
产品使用者:即字面意义,是产品的使用
抽象产品:产品类型,即一种产品的抽象,(接口或抽象类)。
具体产品:对抽象产品的具体化,(实现抽象类或接口中的方法)
具体工程:处理所有的产品
注:此模式开闭型较差,因为每增加一种产品,都要更改工厂类中的逻辑
二、工厂方法模式
一、其角色有
1、抽象产品类
2、具体产品类
3、抽象工厂类
4、具体工厂类
5、产品使用者
二、解析
产品使用者:即字面意义,是产品的使用
抽象产品类:产品的抽象 (一般为抽象类或接口,有具体产品类继承),这个是不改变的
抽象工厂类:工厂的抽象(只定义工厂的方法,其实现由具体工厂类继承实现),这个是不改变的
具体产品类:对抽象产品类中方法的具体化,实现其逻辑
具体工厂类:对抽象工厂类中的方法的具体化,实现其逻辑
产品使用者:使用产品
(自我理解:具体产品和具体工厂是相对应者的,可能一个具体产品对应一个具体工厂,或者和简单工厂相结合,一个具体工厂管理一组相类似的产品)
注:开闭性方面:当有新的产品产生时,只要按照抽象产品角色、抽象工厂角色提供的方法来生成,那么就可以被使用者使用,而不必去修改任何已有的代码。(即当有新产品时,只要创建并具体抽象产品;新建具体工厂继承抽象工厂;而不用修改任何一个类)工厂方法模式是完全符合开闭原则的!
当需要新建产品时:
流程解析:根据抽象产品类创建具体产品类(新增的这个产品)--->根据新增的这个具体产品创建具体工厂类(继承与抽象工厂类),
这样就实现了产品的新增
三、抽象工厂模式
一、其角色有
1、抽象产品类
2、具体产品类
3、抽象工厂类
4、具体工厂类
5、产品使用者
二、解析
先举一个例子:(不太恰当,看着理解)
A厂有产品:辣条、牛奶、方便面
B厂有产品:辣条、牛奶、方便面
则A厂看做一个产品树,B厂看做一个产品树。
而A厂和B厂都有辣条,则把 A.辣条 B.辣条 (其它同理) 看做是一个族
则A B分别创建一个抽象产品类,而抽象工厂类则创建两个抽象方法分别对应 两类抽象产品。(即A和B)
具体产品类:A中有具体的辣条类、牛奶类、方便面类实现A的抽象产品类(B中的同理)
具体工厂类:一个族创建一个具体工厂类,比如上述有三个中类,则有三个具体的工厂方法。(第一个具体工厂类实现可以返回A厂辣条类的对象或者B厂辣条类的对象这两个方法,第二个或第三个同理可得)
注:当增加一个新的产品族时只需增加一个新的具体工厂,不需要修改原代码,满足开闭原则。
例如:A厂、B厂都增加了一个产品火腿肠,则需要建立一个A厂的火腿肠具体产品 类,一个B厂的火腿肠具体产品类,这位一个族,再建立一个具体工厂类管理这个族即大功告成,新增加产品不需要修改原代码
但是,若是增加一个产品数,比如增加一个C厂,就要修改许多原代码了,就不满足开闭原则了。