1.什么是简单工厂模式?很高大上,它的官方解释是:定义一个创建对象的接口,让子类决定实例化哪个类。工厂模式将类的实例化推迟到其子类。 这种模式本身很简单,用于比较简单的业务场景。一般用于小型项目或者针对具体产品扩展的师资较少的时候(这样工厂类就不需要经常改)。 PS:不修改代码无法扩展。2.简单工厂模型的作用简单工厂的作用是实例化对象,而不需要客户知道这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或基类。当子类比较固定,不需要扩展时,可以使用简单工厂,在一定程度上降低耦合度。3、支付宝、微信、银联的连接方式(connectMode)和支付方式(payMode)。使用工厂模式,“客户”不需要知道具体的连接方式和支付方式,只需要调用connectMode和payMode即可。MySQL、SQLServer、Oracle等数据库的连接模式(connectMode)、查询模式(selectMode)等操作都可以使用工厂模式进行封装。下面的例子会讲到。下面以创建数据库类为例:productclass/***databaseseries**/abstractClassDataBase{abstractfunctiongetOne($sql);//获取一条数据的方法}ClassSqlServerextendsDataBase{function__construct(){$connect="SqlServer连接方法操作(腾讯云服务器)";return$connect} functiongetOne($sql){return"查询后返回数据结果";}}ClassMySqlextendsDataBase{function__construct(){$connect="MySql连接方法操作(阿里云服务器)";return$connect}functiongetOne($sql){return"查询后返回的数据结果";}}工厂类/****创建数据库的工厂类*/classFactory{staticfunctioncreateDataBase($type){switch($type){caseSqlServer:returnnewSqlServer();caseMySql:返回新的MySql();//....}}客户端类/****客户通过工厂获取数据*/classCustomer{private$database;functiongetDataBase($type){return$this->database=Factory::createDataBase($type);}}}$客户ome=newCustomer;$db=$custome->getDataBase("SqlServer");//我想获取阿里云的SQLServer数据库的数据$data=$db->getOne($sql);4、组件传递从上面的案例我们可以知道,工厂模型一般由以下几个部分组成:工厂角色:这是这个模型的核心,包含了一定的业务逻辑和判断逻辑。根据不同的逻辑,生产出特定的工厂产品。比如例子中的Factory类。抽象产品作用:一般是具体产品所继承的父类或实现的接口。由接口或抽象类实现。比如例子中的DataBase接口。具体产品角色:工厂类创建的对象就是这个角色的实例。它是由JAVA中的一个特定的类来实现的,比如例子中的MySql和SqlServer类。在使用工厂设计模式时,首先要对你的产品(需求)进行分类,找出共同点和特征,然后根据共同点创建自己的产品类。这时候,如果没有办法通过客户类来调用各个产品类,那么耦合度就会大大增加(当需求发生变化时)。这时候创建一个工厂类统一管理产品类,然后通过客户类调用。那么就可以很好的管理代码,一定程度上解耦。参考系列源码地址WilburXu/design_pattern系列目录PHP设计模式概述PHP设计模式(一)简单工厂模式(SimpleFactoryForPHP)PHP设计模式(二)工厂方法模式(FactoryMethod)PHP设计模式(三)抽象工厂模式(抽象工厂)PHP设计模式(四)单例模式(Singleton)
