工厂模式:说白了就是使用统一方法(工厂方法)来实例化对象,咱们定义一个专门用来建立其它对象的类。 这样在须要调用某个类的时候,咱们就不须要去使用new关键字实例化这个类,而是经过咱们的工厂类调用某个方法获得类的实例。php
工厂模式一般用来返回符合相似接口的不一样的类,工厂的一种常见用法就是建立多态的提供者,从而容许咱们基于应用程序逻辑或者配置设置来决定应实例化哪个类,例如,可使用这样的提供者来扩展一个类,而不须要重构应用程序的其余部分,从而使用新的扩展后的名称 。数据库
一般,工厂模式有一个关键的构造,根据通常原则命名为Factory的静态方法,然而这只是一种原则,工厂方法能够任意命名,这个静态还能够接受任意数据的参数,必须返回一个对象。spa
当咱们对象所对应的类的类名发生变化的时候,咱们只须要改一下工厂类类里面的实例化方法便可。不须要外部改全部的地方,若是是更改参数,那么又得另一种说法了。code
下面咱们看代码:对象
index.php //单一入口 <?php $a=Database::getInstance(); //直接调用数据库静态化方法 $db=Factory::createDatabase(); //使用工厂模式,来实例化数据库 Database.php //数据库类 <?php class Database { static protected $db; private function __construct() { } static function getInstance() { if(self::$db){ return slef::$db; }else{ self::$db=new self(); return self::$db; } } } Factory.php /工厂模式类 <?php namespace IMooc; class Factory { static function createDatabase() { $db=Database::getinstance(); return $db; } }
你懂了?工厂模式,其实就是把类的实例化给隐藏了,让系统自动去执行实例化,你所要作的,就是经过工厂模式,来获得对应的对象。接口