PHP中的设计模式-创建型-简单工厂

适用条件:

 简单的说,所有的设计模式的目标都是为了以后的扩展. 当业务扩展时,尽可能少的修改原有代码. 我们知道,修改原有代码就有可能出错,会担责任的.

 本模式适用于只有一种产品,但本产品可以有多种型号(版本),而且以后可能还会增加新的型号. 我们在应用中需要根据实际的情况来创建不同版本的产品对象.


限制条件:

    1.产品: 只有一种产品, 但可以有多个型号,并且以后还会增加

    2.产品: 产品的创建过程较复杂.

    3.工厂: 只有一个工厂, 可以根据参数的不同来创建不同的产品.

    4.工厂: 产品只由工厂创建, 开发人员不要自行创建产品.

    5.业务限制: 业务增长后,可能会增加产品型号, 此时需要修改工厂方法来提供新型号产品的创建过程

注意: 

看完具体实现后, 一定要看最后的示例.


具体实现:

 

/**
 * 简单工厂示例
 * User: 蓝冰大侠
 */
class CSimpleFactory extends SController
{
    public function index()
    {
        //生成工厂
        $factory = new Factory();

        //使用工厂创建产品X
        $product = $factory->createProduct('x');
        $product->methodA();
        $product->methodB();

        //使用工厂创建产品Y
        $product = $factory->createProduct('y');
        $product->methodA();
        $product->methodB();
    }
}

//所有产品的基类
abstract class Product
{
    //每个产品都必须实现以下方法
    abstract public function methodA();

    abstract public function methodB();
}

//定义产品类X
class ProductX extends Product
{
    public function methodA()
    {
        echo 'product x do A.';
    }

    public function methodB()
    {
        echo 'product X do B.';
    }
}

//定义 产品类Y
class ProductY extends Product
{
    public function methodA()
    {
        echo 'product Y do A';
    }

    public function methodB()
    {
        echo 'product Y do B';
    }
}


//定义工厂类
class Factory
{
    //根据参数的不同创建不同的产品
    public function createProduct($type): Product
    {
        if ($type == 'x') {
            return new ProductX();
        }
        if ($type == 'y') {
            return new ProductY();
        }
        throw new Exception('Unknown product type.');
    }
}
示例:

关于缓存的使用是一个普遍问题,我们可以使用本地文件进行缓存,也可以使用数据库进行缓存,还可以使用memcache,redis,mongo

系统中需要缓存的数据也有多种: 查询结果缓存/页面缓存/跨页面消息缓存.

我们可能根据业务 情况 在不同的功能中,使用不同的缓存载体.

即: 缓存工厂要根据参数来创建不同载体的具体缓存类~~~.


示例二:

支付类, 系统中可能实现 支付宝,微信支付等,但业务接口肯定是一样的, 我们的业务代码要根据用户的实际选择来创建具体的支付类.

这里我们就应该用工厂来生成这个具体的支付对象. 业务代码就不需要关注支付对象的生成细节了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值