zoukankan      html  css  js  c++  java
  • PHP设计模式(一)简单工厂模式 (Simple Factory For PHP)

    最近天气变化无常,身为程序猿的寡人!~终究难耐天气的挑战,病倒了,果然,程序猿还需多保养自己的身体,有句话这么说:一生只有两件事能报复你:不够努力的辜负和过度消耗身体的后患。话不多说,开始吧。

    一、什么是简单工厂模式

      简单工厂 (Simple Factory)又称静态工厂方法模式(Static Factory Method Pattern)

      使用的频率也是非常高,它的官方解释为:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。

      这个模式本身很简单而且使用在业务较简单的情况下。一般用于小项目或者具体产品很少扩展的情况(这样工厂类才不用经常更改)。

      PS:不修改代码的话,是无法扩展的。

    二、简单工厂模式的作用

      简单工厂的作用是实例化对象,而不需要客户了解这个对象属于哪个具体的子类。简单工厂实例化的类具有相同的接口或者基类,在子类比较固定并不需要扩展时,可以使用简单工厂,一定程度上可以很好的降低耦合度

    三、使用场景

    1. 支付宝、微信、银联的连接方式(connectMode),支付方式(payMode)。   使用工厂模式,“客户”就不需要不要知道具体的连接方式和支付方式了, 只需要调用connectMode 和payMode即可。 
    2. MySQL、SQL Server、Oracle等数据库的连接方式(connectMode)、查询方式(selectMode)等操作可以使用工厂模式进行封装。下面的例子会讲到。

     四、组成部分

    1. 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑,根据逻辑不同,产生具体的工厂产品。如例子中的Factory类。
    2. 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。由接口或者抽象类来实现。如例中的DataBase接口。
    3. 具体产品角色:工厂类所创建的对象就是此角色的实例。在JAVA中由一个具体类实现,如例子中的MySql和SqlServer类。

     产品类:

    <?php  
    
    /** 
     * 数据库系列 
     * 
     */  
    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);

    先归类你的产品(需求)找到共同点和特征,然后根据共同的地方 创建 各自的产品类, 这时候如果没有 直接同个客户类去调用每一个 产品类,那么耦合度会大大增高(在需求变动的时候), 这时候创建一个工厂类统一管理产品类,再通过客户类调用。 那么可以很好的管理代码并一定程度上的解耦。 

     

     

    如果有什么疑问或者讲错的地方,欢迎大家留言。

     

  • 相关阅读:
    EveryOne Piano
    3D扫描商店
    Substance PBR Guide
    C2GOASM
    Unity调试外部DLL
    BinaryReader优化
    IL
    如何画头发
    Bitrix24
    Mac查找包含指定字符串的文件
  • 原文地址:https://www.cnblogs.com/wilburxu/p/6086394.html
Copyright © 2011-2022 走看看