zoukankan      html  css  js  c++  java
  • PHP 工厂模式 价值理解和简单实例

    工厂模式价值:

    1. 减少类之间的耦合
    2. 提高类的复用性

    工厂模式(Factory)允许在代码执行时实例化对象。之所以被称为工厂模式是因为它负责“生产”对象。以数据库为例,工厂需要的就是根据不同的参数,生成不同的实例化对象。它只负责生产对象,而不负责对象的具体内容。

    定义一个适配器接口:

    <?php
    interface DbAdapter 
    {
        /**
        * 数据库连接
        * @param $config 数据库配置
        * @return resource
        */
        public function connect($config);
        
        /**
        * 执行数据库查询
        * @param string $query 数据库查询SQL字符串
        * @param mixed $handle 连接对象
        * @return resource
        */
        public function query($query, $handle);
    }
    
    

      

    定义MySQL数据库操作类:

    <?php
    class DbAdapterMysql implements DbAdapter
    {
        private $_dbLink; //数据库连接字符串表示
    
        /**
        * 数据库连接函数
        * @param $config 数据库配置
        * @throws DbException
        * @return resource
        */
        public function connect($config)
        {
            if($this->_dbLink = @mysql_connect($config->host .
                (empty($config->port) ? '' : ':' . $config->port),
            $config->user, $config->password, true)) {
                if(@mysql_select_db($config->database, $this->_dbLink)){
                    if($config->charset){
                        mysql_query("SET NAMES '{$config->charset}'", $this->_dbLink);
                    }
                    return $this->_dbLink;
                }
            }
            //数据库异常
            throw new DbException(@mysql_error($this->_dbLink));
        }
        
        /**
        * 执行数据库查询
        * @param string $query 数据库查询SQL字符串
        * @param mixed $handle 连接对象
        * @return resource
        */
        public function query($query, $handle)
        {
            if ($resource = @mysql_query($query, $handle)) {
                return $resource;
            }
        }
    }
    

      

    SQLite数据库操作类:

    <?php
    class DbAdapterSqlite implements DbAdapter
    {
        private $_dbLink;
        
        /**
        * 数据库连接函数
        * @param $config 数据库配置
        * @throws DbException
        * @return resource
        */
        public function connect($config)
        {
            if ($this->_dbLink = sqlite_open($config->file, 0666, $error)) {
                return $this->_dbLink;
            }
            
            throw new DbException($error);
        }
        
        /**
        * 执行数据库查询
        * @param string $query 数据库查询SQL字符串
        * @param mixed $handle 连接对象
        * @return resource
        */
        public function query($query, $handle)
        {
            if ($resource = @sqlite_query($query, $handle)) {
                return $resource;
            }
        }
    }
    

      

    定义一个工厂类,根据传入不同的参数生成需要的类:

    <?php
        class sqlFactory
        {
            public static function factory($type)
            {
                if (include_once 'Drivers/' . $type . '.php') {
                    $classname = 'DbAdapter' . $type;
                    return new $classname;
                } else {
                    throw new Exception('Driver not found');
                }
            }
        }
    

      

    调用:

    $db = sqlFactory::factory('MySQL');
    $db = sqlFactory::factory('SQLite');
    

      

  • 相关阅读:
    安装Rocky版OpenStack 1控制节点+1计算节点环境部署脚本
    脚本安装Rocky版OpenStack 1控制节点+1计算节点环境部署
    采用脚本自动填写具有交互式命令的方法
    CentOS安装Docker
    WordPress博客搭建与问题总结
    OpenStack端口(15)
    openstack搭建之-horizon配置(14)
    openstack搭建之-创建实例(13)
    openstack搭建之-cinder配置(12)
    openstack搭建之-neutron配置(11)
  • 原文地址:https://www.cnblogs.com/jinshao/p/13059818.html
Copyright © 2011-2022 走看看