P

PHP 基本设计模式之一 工厂模式

xyj2156 PHP 2019-04-13

简介

工厂模式简单来讲就是用来生产(生成)我们所需要的对象,而生产这类对象的类叫做工厂类,通常使用静态方法,一般这个类是不需要实例化的。

先看一个工厂类的例子

class Obj {}

class Factory
{
    static public function createObj()
    {
        return new Obj;
    }
}
我们发现上面的情况简直就是多此一举嘛,完全没有任何意义,还不如直接去 new 省事

我们可以想象一种情况(项目中遇到任何可能都是可能的):

当有一两种类处理不同类型的相同事情的时候,我们使用的这些类的时候,最先想到的是在使用的时候,添加 if...else或者是switch...case来判断
如果这些类不值一两种了,想象一下,每一次实例化的地方都要添加一次 判断。
而通过工厂方式处理就显得尤为简单了。

通过参数返回不同的对象

class Red {}
class Green{}

class Factory
{
    static public function createObj($type)
    {
        switch(strtolower($type))
        {
             case 'red':
                return new Red;
             case 'green':
                return new Green;
             default:
                throw new \Exception('未找到所需类');
        }
    }
}
当我们看到上面的工厂类,再想象上面的问题,是不是解决起来就感觉非常舒服了。
我们以后添加颜色的时候,就可以添加一个类,然后在工厂类中添加一个判断分支就行了。

最后

个人发现写程序挺好玩的,你从上面的工厂类中添加一个可以保存对象的数组的私有属性,通过传进来的参数,作为存储这个对象的key你发现和单例模式很像,只不过单例模式就是从自身的静态方法获取,这个就是从统一的类中获取了,其实这样修改就和另一种模式很像了,注册器模式。
PREV
php 操作 sqlite
NEXT
PHP设计模式 注册器模式

评论(0)

评论已关闭