工厂模式在于可以根据输入参数或者应用程序配置的不同来创建一种专门用来实现化并返回其它类的实例的类。
工厂模式的例子:
width = $width; $this->height = $height; } public function getCircum() { return 2 * ($this->width + $this->height); } public function getArea() { return $this->width * $this->height; } } // 定义圆类 class Circle implements IShape { private $radii; public function __construct($radii) { $this->radii = $radii; } public function getCircum() { return 2 * M_PI * $this->radii; } public function getArea() { return M_PI * pow($this->radii, 2); } } // 根据传入的参数个数不同来创建不同的形状。 class FactoryShape { public static function create() { switch (func_num_args()) { case 1: return new Circle(func_get_arg(0)); break; case 2: return new Rectangle(func_get_arg(0), func_get_arg(1)); break; } } } // 矩形对象 $c = FactoryShape::create(4, 2); var_dump($c->getArea()); // 圆对象 $o = FactoryShape::create(2); var_dump($o->getArea()); 使用工厂模式使得在调用方法时变得更容易,因为它只有一个类和一个方法,若没有使用工厂模式,则要在调用时决定应该调用哪个类和哪个方法;使用工厂模式还使得未来对应用程序做改变时更加容易,比如要增加一种形状的支持,只需要修改工厂类中的create()一个方法,而没有使用工厂模式,则要修改调用形状的代码块。 PHP 工厂模式 一、什么是工厂模式? 一个类通过本身的静态方法来,实例化一个类并返回一个实例对象; 二、工厂模式特点? 类命名特点:nameFactory eg: class mysqlFactory{} 【这是为了规范,当然也去起其他任意名字】 静态方法名称:static public function factory($class_name){} 【静态方法是类与外界的接口, 返回的是一个对象】 三、优点? 如果已经使用的类内部发生改变,哪不需要在所有的地方都改变,只需要在类工厂类里改变既可, 比如:连接数据库,可以使用mysql 、mysqli、pdo,根据不同参数配置使用不同的数据库操作类 四、应用场景 做支付接口的时候,未来可能对应不同的支付网关:支付宝、财付通、网银在线等。 方便未来扩展,设计成工厂模式。定一个专门生产网关接口的工厂,抽象出来, 做成接口形式,让所有的子类都要实现它的接口。 以后加一个支付方式,要使用哪一种支付方式,改变一下参数即可。 在为用户注册的时候,分为很多种角色的用户。 比如册用户,匿名用户、管理员用户等。完全使用可以使用工厂的思想来实现, 代码也容易维护,为每种角色可以生成操作的类等等。 系统对接多个不同类型的数据库,mysql,oracle,sqlserver 五、代码实例; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 interface mysql{ public function connect(); } class mysqli2 implements mysql{ public function connect(){ echo 'mysqli'; } } class pdo2 implements mysql{ public function connect(){ echo 'pdo'; } } class mysqlFactory{ static public function factory($class_name){ return new $class_name(); } } $obj = mysqlFactory::factory('pdo2'); $obj->connect();