摘要:工厂模式使一个类的实例化延迟到其子类。参考系列源地址系列目录设计模式概述设计模式一简单工厂模式设计模式二工厂方法模式设计模式三抽象工厂模式设计模式四单例模式
一、什么是简单工厂模式
简单工厂 (Simple Factory)又称静态工厂方法模式(Static Factory Method Pattern)
使用的频率可以说是非常之高,它的官方解释为:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。
这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品扩展教师较少的情况(这样工厂类才不用经常更改)。
PS:不修改代码的话,是无法扩展的。
二、简单工厂模式的作用简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂,一定程度上可以很好的降低耦合度。
三、案例支付宝、微信、银联的连接方式(connectMode),支付方式(payMode)。使用工厂模式,“客户”就不需要不要知道具体的连接方式和支付方式了,只需要调用connectMode 和payMode即可。
MySQL、SQL Server、Oracle等数据库的连接方式(connectMode)、查询方式(selectMode)等操作可以使用工厂模式进行封装。下面的例子会讲到。
我们以数据库类创建的案例来说:
产品类/** * 数据库系列 * */ 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);四、组成部分
通过以上案例可以得知一般情况下工厂模式由以下几个部分组成:
工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Factory类。
抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的DataBase接口。
具体产品角色:工厂类所创建的对象就是此角色的实例。在JAVA中由一个具体类实现,如例子中的MySql和SqlServer类。
使用工厂设计模式时必须先归类你的产品(需求)找到共同点和特征,然后根据共同的地方创建各自的产品类,这时候如果没有无法通过客户类去调用每一个产品类,那么耦合度会大大增高(在需求变动的时候), 这时候创建一个工厂类统一管理产品类,再通过客户类调用。 那么可以很好的管理代码并一定程度上的解耦。
参考 系列源地址WilburXu/design_pattern
系列目录PHP 设计模式概述
PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)
PHP设计模式(二)工厂方法模式(Factory Method)
PHP设计模式(三)抽象工厂模式(Abstract Factory)
PHP设计模式(四)单例模式(Singleton)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29490.html
摘要:创建型模式主要有以下五种简单工厂模式和工厂方法模式抽象工厂模式单例模式建造者模式原型模式在设计模式一书中将工厂模式分为两类工厂方法模式与抽象工厂模式。 一、 设计模式(Design pattern)是什么 设计模式是一套被反复使用、多数人知晓、经过分类编目的代码设计的经验总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 二、 为什么会有设计模式 在软件开发过...
摘要:支持增加任意产品抽象工厂用来生产不同产品族的全部产品。对于增加新的产品,无能为力支持增加产品族参考系列源地址系列目录设计模式概述设计模式一简单工厂模式设计模式二工厂方法模式设计模式三抽象工厂模式设计模式四单例模式 一、什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次...
摘要:对于这个问题,接下来的工厂方法模式可以解决这个问题。二工厂方法模式的优点拥有良好的封装性,代码结构清晰。参考系列源地址系列目录设计模式概述设计模式一简单工厂模式设计模式二工厂方法模式设计模式三抽象工厂模式设计模式四单例模式 简单工厂简述: 简单工厂模式实现了产品类的代码跟客户端代码分离,但会有一个问题,优秀的代码是符合开闭原则如果你要加一个C类产品,你就要修改工厂类里面的代码,也就是说...
摘要:一什么是单例设计模式单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。 一、什么是单例设计模式 单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。 二、单例模式的技巧 利用$_instance私有变量来保存类的唯一实例化对象; 设计一个getInstance对外公开的函数,...
摘要:创建型设计模式通过控制这个对象的创建方式来解决此问题。通过这样做,这些模式增加了执行此通信的灵活性。已于年月日翻译完毕,参与用户人,详细列表请见参与译者。 showImg(https://segmentfault.com/img/bV6R8Q?w=1024&h=683); 翻译进度请见:https://laravel-china.org/doc... 设计模式不仅代表着更快开发健壮软件...
阅读 1825·2021-11-12 10:36
阅读 2258·2021-09-01 10:29
阅读 2296·2019-08-30 15:56
阅读 991·2019-08-30 12:56
阅读 2293·2019-08-26 13:58
阅读 2183·2019-08-23 18:38
阅读 1452·2019-08-23 18:32
阅读 2063·2019-08-23 16:53