【工厂方法模式】
工厂方法模式,又称工厂模式。说到工厂,我们可以联想到一个服装厂可以生产出各式各样的衣服,随着市场的需要,也会生产出新的款式的衣服,但是我们并不能预测新款是什么样子,设计师设计出来交给工厂安排到对应生产线上生产就完了。
在编程中与之相似的是,有时候我们在创建对象的过程中,并不能确定类一定创建(实例化)出哪一种类型的对象,我们更希望根据不同参数得到不同的类实例,这时我们可以通过定义一个父类作为定义创建对象的接口,将实例化推迟到子类中完成,让子类来决定实例化哪一个具体的对象。这样做的好处是把创建对象的过程封装了起来,通过一个工厂类来创建新的对象,而不是每创建一个对象就new一遍。
结构:1个工厂父类(interface或abstract) 、多个具体工厂子类(实现父类接口或继承抽象父类)
1个产品父类(interface或abstract) 、多个具体产品子类(实现父类接口或继承抽象父类)
示例:下面以一个服装厂生成衣服为例,服装厂有两个分厂,分别负责生产男装和女装,每增加一个产品都需要增加对应的工厂
- 抽象工厂父类 ClothesFactory.php :
<?php
namespace app\design02\controller;
//抽象父类工厂(服装总厂)
abstract class ClothesFactory
{
//要求子类(分厂)必须可以实现的方法(职能):
//生产衣服
abstract public function createClothes();
}