简单工厂 (Simple Factory)又称静态工厂方法模式(Static Factory Method Pattern)php
使用的频率能够说是很是之高,它的官方解释为:定义一个用于建立对象的接口,让子类决定实例化哪个类。工厂模式使一个类的实例化延迟到其子类。sql
这个模式自己很简单并且使用在业务较简单的状况下。通常用于小项目或者具体产品扩展教师较少的状况(这样工厂类才不用常常更改)。数据库
PS:不修改代码的话,是没法扩展的。segmentfault
简单工厂的做用是实例化对象,而不须要客户了解这个对象属于哪一个具体的子类。简单工厂实例化的类具备相同的接口或者基类,在子类比较固定并不须要扩展时,可使用简单工厂,必定程度上能够很好的下降耦合度。设计模式
咱们以数据库类建立的案例来讲:服务器
/** * 数据库系列 * */ abstract Class DataBase { abstract function getOne($sql); //获取一条数据的方法 } Class SqlServer extends DataBase { function __construct() { $connect = "SqlServer 链接方法操做 (腾讯云服务器)"; return $connect } function getOne($sql){ return "查询后返回数据结果"; } } Class MySql extends DataBase { function __construct(){ $connect = "MySql 链接方法操做 (阿里云服务器)"; return $connect } function getOne($sql){ return "查询后返回数据结果"; } }
/** * * 建立数据库的工厂类 */ class Factory { static function createDataBase($type) { switch ($type) { case SqlServer: return new SqlServer(); case MySql: return new MySql(); //.... } }
/** * * 客户经过工厂获取数据 */ class Customer { private $database; function getDataBase($type) { return $this->database = Factory::createDataBase($type); } } $custome = new Customer; $db = $custome->getDataBase("SqlServer"); // 我要获取阿里云的SQL Server数据库的数据。 $data = $db->getOne($sql);
经过以上案例能够得知通常状况下工厂模式由如下几个部分组成:微信
使用工厂设计模式时必须先归类你的产品(需求)找到共同点和特征,而后根据共同的地方建立各自的产品类,这时候若是没有没法经过客户类去调用每个产品类,那么耦合度会大大增高(在需求变更的时候), 这时候建立一个工厂类统一管理产品类,再经过客户类调用。 那么能够很好的管理代码并必定程度上的解耦。this