【抽象工厂模式】
前面讲的工厂方法模式,每增加一个产品都需要增加对应的工厂,这样就会存在很多工厂,但是在现实生活中的有些时候,人们并不关心产品是由哪个工厂制造的,就像一个服装厂既可以生产男装,也可以生产女装,我们只需造一个服装厂同时生产一个产品族下的男装和女装即可,而不必要分别创建两个服装厂。
抽象工厂模式,则为一个产品族提供了统一的创建接口,当需要这个产品族的一系列相关对象时,就可以为此系列的产品族创建一个具体的工厂类来实现该接口。
结构:1个工厂父类(interface或abstract) 、1个具体工厂子类(实现父类接口或继承抽象父类)
多个产品父类(interface或abstract) 、多个具体产品子类(实现父类接口或继承抽象父类)
示例:下面以还是以服装厂生成衣服为例,一个服装厂,既可以生产男装也可以生产女装,每增加一个产品都需要在具体工厂子类中增加实例化方法:
- 父类工厂接口 IFactory.php :
<?php
namespace app\design03\controlle