PHP工厂模式

概念及特点:
 
工厂类是指包含了一个专门用来创建其他对象的方法的类。
工厂模式,顾名思义,如同工厂一样,你把原材料放入工厂中,出来的是成品,而你并不需要知道工厂里做了什么,工厂模式主要用于解耦。
把对象的创建和使用的过程分开。
工厂类根据参数来决定创建出哪一种产品类的实例。
提供一个创建对象实例的功能,而无需关心其具体实现,被创建实例的类型可以是接口、抽象类,也可以是具体的类。
 

基本步骤:

1、Api: 定义客户所需要的功能接口

2、Impl: 具体实现Api的实现类,可能会有多个

3、Factory: 工厂,选择合适的实现类来创建Api接口对象

4、Client: 客户端,通过Factory 来获取Api接口对象,然后面向Api接口编程

 

简单工厂的调用顺序示意图

 

 

简单工厂的命名建议:

类命名建议为“模块名称+Factory”,比如,用户模块的工厂就称为UserFactory

方法名称通常为“get+接口名称”或者是“create+接口名称”。比如用户接口名称为UserEbi,那么方法名称通常为getUserEbi或者createUserEbi。

简单工厂方法的内部主要实现的功能是“选择合适的实现类”,选择条件或者是参数的来源通常为一下集中:

来源于客户端,由Client来传入参数

来源于配置文件,从配置文件获取用于判断的值

来源于程序运行期的某个值,比如从缓存中获取某个运行期的值

工厂模式php实例:

<?php

/***

公司接口类*

Interface Company

*/

interface Company{    

    public function add($username);//添加员工    

    public function del($username);//删除员工}

}

?>

 

<?php

/**

* A 公司

* Class Company_A

*/

class Company_A implements Company{

    public function add($username){

        echo $username .'&nbsp;is add into A</br>';

    }

    public function del($username){

        echo $username .'&nbsp;is del function from A</br>';

    }

}

?>

 

<?php

/**

* B 公司

* Class Company_B

*/class Company_B implements Company{

    public function add($username){

        echo $username .'&nbsp;is add into B</br>';

    }

    public function del($username){

        echo $username .'&nbsp;is del function from B</br>';

    }

}

?>

 

<?php

class Factory{

    public static function create_obj($type){

        switch($type){

            case 'A':

                $obj = new Company_A();

                break;

            case 'B':

                $obj = new Company_B();

                break;

        }

        return $obj;

    }

}

$company = Factory::create_obj("A");

$company->add('user1');

$type = 'B';

$company = Factory::create_obj($type);

$company->del('user2');

结果:

user1 is add into A

user2 is del function from B

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐月浅歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值