简介
工厂模式简单来讲就是用来生产(生成)我们所需要的对象,而生产这类对象的类叫做工厂类,通常使用静态方法,一般这个类是不需要实例化的。
先看一个工厂类的例子
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
你发现和单例模式很像,只不过单例模式就是从自身的静态方法获取,这个就是从统一的类中获取了,其实这样修改就和另一种模式很像了,注册器模式。
评论已关闭