zoukankan      html  css  js  c++  java
  • 设计模式(五)之适配器模式

    适配器模式

    将各种截然不同的函数接口封装成统一的API。 
    PHP中的数据库操作有MySQL,MySQLi,PDO三种,可以用适配器模式统一成一致,使不同的数据库操作,统一成一样的API。类似的场景还有cache适配器,可以将memcache,redis,file,apc等不同的缓存函数,统一成一致。 
    首先定义一个接口(有几个方法,以及相应的参数)。然后,有几种不同的情况,就写几个类实现该接口。将完成相似功能的函数,统一成一致的方法。

    实现步骤:

    1.定义接口interface;及接口公用的方法

    2.类开始实现接口;

    3.实例化类对象调用接口方法

    <?php
    header("Content-Type:text/html;charset=utf-8");
    //意图:将一个类的接口转换成客户希望的另外一个接口。
    //适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
    interface baseDB
    {
        public function connect($host,$user,$pass,$dbname);
        public function query($sql);
        public function close();
    }
    //myslq实现接口
    class my_sql implements baseDB
    {
        protected $conn;
        public function connect($host,$user,$pass,$dbname)
        {
            $conn = mysql_connect($host,$user,$pass);
            mysql_select_db($dbname,$conn);
            $this->conn;
        }
        public function query($sql){
            return mysql_query($sql,$this->conn);
        }
        public function close(){
            mysql_close($this->conn);
        }
    }
    //myslq实现接口
    class my_sqli implements baseDB
    {
        protected $conn;
        public function connect($host,$user,$pass,$dbname)
        {
            $conn = mysqli_connect($host, $user, $pass, $dbname);
            /* 打印当前数据库编码 */
            $charset = $conn->character_set_name();
            printf ("打印当前数据库编码 %s
    ", $charset);
    
            /* 设置编码 utf8 */
            if (!$conn->set_charset("utf8")) {
                printf("Error loading character set utf8: %s
    ", $conn->error);
            } else {
                printf("Current character set: %s
    ", $conn->character_set_name());
            }
    
            $this->conn = $conn;
        }
        public function query($sql){
            return mysqli_query($this->conn,$sql);
        }
        public function close(){
            mysqli_close($this->conn);
        }    

      public function getLink()
      {
        return $this->conn;
      }

    
    }
    //开始实例化类对象
    $db = new my_sqli();
    $db->connect('127.0.0.1:3306','root','','daokr');
    $query = $db->query('select username,email from ik_user');
    
    
    if($query){
        while ($row = $query->fetch_row()) {
            printf ("%s (%s)
    ", $row[0], $row[1]);// 输出:字段
        }
    }else{
        echo "查询失败";
    }

    $db->close(); //关闭后 下面语句无法获取到数据库版本
    $my = $db->getLink();
    echo $my->server_info;

    ?>
    //输出结果:
    打印当前数据库编码 latin1
    Current character set: utf8
    氘氪网 (ikoscn@sina.cn)
    爱客开源 (ikos@sina.cn)
    马六甲娃娃 (277529373@qq.com)
    duokr (daokr@sina.cn)
  • 相关阅读:
    【第一周】进度条
    【第二周】Java实现英语文章词频统计(改进1)
    【第二周】关于java.util包下的Random类
    【第二周】结对编程(宫丽君和林莉):四则运算
    【第二周】scrum站立会议
    【第二周】燃尽图
    【第二周】Java实现英语文章词频统计
    【第一周】读《构建之法》有感
    python:带参数的装饰器,函数的有用信息
    python:数据类型dict
  • 原文地址:https://www.cnblogs.com/wanglijun/p/10927965.html
Copyright © 2011-2022 走看看