PHP中的设计模式-创建型-工厂方法模式

说明:

 工厂方法模式, 简单工厂模式, 静态工厂模式  这三者 都是 抽象工厂模式的简化版本, 单独针对某一方面

 本模式重点表述, 具体的工厂使用不同的方式 来生产产品

实现代码:

<?php

/**
 * 工厂方法模式示例
 * User: 蓝冰大侠
 */
class CFactoryMethod extends SController
{
    public function index()
    {
        //通过A工厂生成产品
        $factory=new FactoryA();
        $obj=$factory->create('Product');
        var_dump($obj); //object(ProductX)#9 (1) { ["name":protected]=> string(9) "A-Product" }

        //通过B工厂生成产品
        $factory=new FactoryB();
        $obj=$factory->create('Product');
        var_dump($obj); //object(ProductX)#8 (1) { ["name":protected]=> string(9) "B-Product" }
    }
}

//定义产品基类(抽象)
abstract class Product
{
    protected $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }
}

//定义工厂基类(抽象),工厂可以生成产品
abstract class AbstractFactory
{
    //具体工厂子类必须实现,但不对外
    abstract protected function createProduct(string $name): Product;

    //对外提供创建产品的方法
    public function create(string $name){
        return $this->createProduct($name);
    }
}

//定义X产品,也可根据需要,定义 Y,Z产品
class ProductX extends Product
{
    //X产品的具体实现细节
}

//定义工厂A
class FactoryA extends AbstractFactory
{
    protected function createProduct(string $name): Product
    {
        return new ProductX('A-'.$name);
    }
}

//定义工厂B
class FactoryB extends AbstractFactory
{
    protected function createProduct(string $name): Product
    {
        return new ProductX('B-'.$name);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值