工厂模式

概念

工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。笼统的说,输入不同的要求就实例化不同的对象。就是一个类所依赖的外部事物的实例,都可以被一个或多个 “工厂” 创建的这样一种开发模式,就是 “工厂模式”。其实根据实际情况,像工厂做的所有的产品是有共同的特点,不同的只是产品的一些外观,但这些都是可调整的。

运用场景

一般在框架中运用比较多,比如laravel中操作数据库,有Eloquent ORM,queryBuilder。

实现

要定义一个抽象基类或一个接口,让子类去实现方法。定义一个工厂类实例化所有的子类。

interface factoryInterface
{
    public function people();
}

class  Girl implements factoryInterface
{

    public function people()
    {
        // TODO: Implement people() method.
        echo '这是girl做的事';
    }
}
//在此类中可以定义boy独有的方法
class Boy implements factoryInterface
{
    public function people()
    {
        // TODO: Implement people() method.
        echo '这是boy做的事';
    }
}

//工厂类用于实例化所有的子类
class  Factory
{
    protected $type;

    function __construct($type)
    {
        $this->type = $type;
    }

    public function select()
    {
        switch (strtolower($this->type)) {
            case 'girl':
                return new  Girl();
                break;
            case 'boy':
                return new Boy();
            default:
                echo '什么也没有';
        }
    }
}
$getObject = (new  Factory('girl'))->select();
$getObject->people();
$getObject = (new  Factory('boy'))->select();
$getObject->people();
原文地址:https://www.cnblogs.com/webph/p/6732620.html