什么是抽象工厂模式?
- 这个模式不怎么容易理解,下面通过一个真实场景可能能更好的理解。
- 如果要用一句话来概括此模式的作用,那就是:封装产品系列,强调对象内的产品一致性。
应用场景
- 1、产品的生产需要多种零部件结合,需要使用此模式。
注意事项
- 由于此模式的工厂接口中定义死了产品的零部件种类,会给后面产品的升级带来灾难性的维护。
具体实现
- 实例场景:在宝马工厂中,生产的各种车型,依赖不同的组装配件。
- 工厂接口定义宝马生产所需要的零件种类,然后工厂子类调用对应零部件类实现。
- UML图(图片引用自网络)
代码实例
Engine.php(引擎配件接口)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 宝马产品接口
*
* @author woodhead
* @date 2023年11月22日22:27:09
*/
interface Engine
{
/**
* 生产发动机
* @return mixed
*/
public function build();
}
Gearbox.php(变速箱配件接口)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 变速箱接口
*
* @author woodhead
* @date 2023年11月22日22:30:10
*/
interface Gearbox
{
/**
* 生产变速箱
* @return mixed
*/
public function build();
}
BMWFactory.php(宝马工厂类接口)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 抽象工厂接口
*
* @author woodhead
* @date 2023年11月22日22:25:37
*/
interface BMWFactory
{
/**
* 生产发动机
* @return Engine
*/
public function createEngine();
/**
* 生产变速箱
* @return Gearbox
*/
public function createGearbox();
}
Engine320.php(宝马320发动机生产实现)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 宝马320发动机生产实现
*/
class Engine320 implements Engine
{
/**
* 实现宝马320的发动机生产细节
* @return String
*/
public function build()
{
return '这里是BMW320发动机生产车间。'.PHP_EOL;
}
}
Engine523.php(宝马523发动机生产实现)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 宝马523发动机生产实现
*/
class Engine523 implements Engine
{
/**
* 实现宝马523的发动机生产细节
* @return String
*/
public function build()
{
return '这里是BMW523发动机生产车间。'.PHP_EOL;
}
}
Gearbox320.php(宝马320变速箱生产实现)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 宝马320变速性生产实现
*/
class Gearbox320 implements Gearbox
{
/**
* 320变速箱生产细节
* @return String
*/
public function build()
{
return '这里是BMW320变速箱生产车间。'.PHP_EOL;
}
}
Gearbox523.php(宝马523变速箱生产实现)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 宝马523变速性生产实现
*/
class Gearbox523 implements Gearbox
{
/**
* 523变速箱生产细节
* @return String
*/
public function build()
{
return '这里是BMW523变速箱生产车间。'.PHP_EOL;
}
}
BMW320Factory.php(宝马320工厂类实现-组装配件)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 宝马320工厂实现
* - 面向用户,使用此类生产320配件
*
* @author woodhead
* @date 2023年11月22日22:39:32
*/
class BMW320Factory implements BMWFactory
{
/**
* 生产320发动机
* @return Engine
*/
public function createEngine()
{
return new Engine320();
}
/**
* 生产320变速箱
* @return Gearbox
*/
public function createGearbox()
{
return new Gearbox320();
}
}
BMW523Factory.php(宝马523工厂类实现-组装配件)
<?php
namespace com\wdqz\factory\abstraction;
/**
* 宝马523工厂实现
* - 面向用户,使用此类生产523配件
*
* @author woodhead
* @date 2023年11月22日22:39:32
*/
class BMW523Factory implements BMWFactory
{
/**
* 生产523发动机
* @return Engine
*/
public function createEngine()
{
return new Engine523();
}
/**
* 生产523变速箱
* @return Gearbox
*/
public function createGearbox()
{
return new Gearbox523();
}
}
测试
<?php
require_once('../../../../autoloader.php');
use com\wdqz\factory\abstraction\BMW320Factory;
use com\wdqz\factory\abstraction\BMW523Factory;
$bmw320Factory = new BMW320Factory;
$bmw320Engine = $bmw320Factory->createEngine();
$bmw320Gearbox = $bmw320Factory->createGearbox();
echo $bmw320Engine->build();
echo $bmw320Gearbox->build();
$bmw523Factory = new BMW523Factory;
$bmw523Engine = $bmw523Factory->createEngine();
$bmw523Gearbox = $bmw523Factory->createGearbox();
echo $bmw523Engine->build();
echo $bmw523Gearbox->build();
效果
作者:Wolf 创建时间:2023-11-22 10:10
最后编辑:Wolf 更新时间:2023-11-27 23:47
最后编辑:Wolf 更新时间:2023-11-27 23:47