什么是工厂模式?
- 顾名思义:工厂是生产产品的一个空间,在工厂中制造、创造客户需要的东西。
- 学术含义:程序设计中,对于类/对象调用者来说,他需要的对象,只需要给定一个条件即可生成,而不用关心对象的生成逻辑。
应用场景?
- 1、数据库、支付
- 2、为实现对象创建/使用的分离,提高设计灵活性
注意事项
- 对象的创建集中在工厂类,适用于约2个以上产品分类的对象维护,2个以下纯属多余,而过多的对象同样会导致高复杂度,甚至影响整体稳定
具体实现
- 实例场景:在宝马工厂中,会生产各种型号的车辆。各个4S店每天都要从工厂下订单。
- 工厂每个型号车辆的生产(实现),交给对应的车间。
- UML图(图片引用自网络)
- Customer:4S店/顾客
- BMWFactory:工厂类
- BMW:宝马车(品牌名称相当于车辆的抽象)
- BMW320:具体型号(品牌的具体实现)
- BMW523:具体型号(品牌的具体实现)
代码实例
BMW.php
<?php
namespace com\wdqz\factory\simple;
/**
* 宝马品牌抽象
*/
interface BMW
{
/**
* 生产抽象方法
*
* @return mixed
*/
public function build();
}
BMW320.php
<?php
namespace com\wdqz\factory\simple;
/**
* BMW320生产车间
*/
class BMW320 implements BMW
{
/**
* 实现父类的生产方法,真正的开始生产车辆
* @return string
*/
public function build()
{
return '这里是BMW320生产车间,已收到订单,开始生产.'.PHP_EOL;
}
}
BMW523.php
<?php
namespace com\wdqz\factory\simple;
/**
* BMW320生产车间
*/
class BMW523 implements BMW
{
/**
* 实现父类的生产方法,真正的开始生产车辆
* @return string
*/
public function build()
{
return '这里是BMW523生产车间,已收到订单,开始生产.'.PHP_EOL;
}
}
BMWFactory.php
<?php
namespace com\wdqz\factory\simple;
class BMWFactory
{
/**
* 工厂类
* - 负责生成对应型号的生产对象
* - 由于PHP语言限制,在注释中显式声明返回值必须为BMW实例
*
* @param $type
* @return BMW
*/
public static function create($type = '')
{
switch ($type) {
case '320':
return new BMW320();
break;
case '523':
return new BMW523();
break;
}
}
}
test.php
<?php
require_once('../../../../autoloader.php');
use com\wdqz\factory\simple\BMWFactory;
$bmw320 = BMWFactory::create('320');
echo $bmw320->build();
$bmw523 = BMWFactory::create('523');
echo $bmw523->build();
效果
作者:Wolf 创建时间:2023-11-20 21:21
最后编辑:Wolf 更新时间:2023-11-27 23:47
最后编辑:Wolf 更新时间:2023-11-27 23:47