概念
工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替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();