zoukankan      html  css  js  c++  java
  • 设计模式---适配器模式

    应用:数据库适配器

    1、定义一个统一方法的数据库接口(目标接口/目标抽象类)

    interface IDatabase
    {
        // 数据库连接
        function connect($host, $user, $passwd, $dbname);
        // 执行sql
        function query($sql);
        // 关闭数据库连接
        function close();
    }
    

    2、单个数据库类定义
    (1) MySQL (mysql数据库操作适配器类)

    • 类文件
    class MySQL implements IDatabase
    {
        protected $conn;
        function connect($host, $user, $passwd, $dbname)
        {
            $conn = mysql_connect($host, $user, $passwd);
            mysql_select_db($dbname, $conn);
            $this->conn = $conn;
        }
        
        function query($sql)
        {
            return mysql_query($sql, $this->conn);
        }
        
        function close() 
        {
            mysql_close($this->conn);
        }
    }
    
    • 单一调用
    $db = new MySQL();
    $db->connect('127.0.0.1', 'root', 'root', 'test');
    $db->query('show databases');
    $db->close();
    

    (2) MySQLi (mysqli数据库操作适配器类)

    • 类文件定义
    class MySQL implements IDatabase
    {
        protected $conn;
        function connect($host, $user, $passwd, $dbname)
        {
            $conn = mysqli_connect($host, $user, $passwd,  $dbname);
            $this->conn = $conn;
        }
        
        function query($sql)
        {
            return mysqli_connect($this->conn, $sql);
        }
        
        function close() 
        {
            mysql_close($this->conn);
        }
    }
    

    (3) PDO (PDO数据库操作适配器类)

    • 类文件定义
    class PDO implements IDatabase
    {
        protected $conn;
        function connect($host, $user, $passwd, $dbname)
        {
            $conn = new PDO("mysql:host={$host};dbname={$dbname}",$username, $password);
            $this->conn = $conn;
        }
        
        function query($sql)
        {
            return $this->conn->query($sql);
        }
        
        function close() 
        {
            unset($this->conn);
        }
    }
    

    3、理解

    多个类文件定义完成后,需要使用数据库的时候,直接通过类名切换实现不同数据库类的调用

    mysql、mysqli、PDO数据库操作类本身的库为适配者

    被实现的接口为目标接口

    封装的三个数据库操作类为三个适配器

    $db = new MySQL();
    //$db = new MySQLi();
    //$db = new PDO();
    $db->connect('127.0.0.1', 'root', 'root', 'test');
    $db->query('show databases');
    $db->close();
    

    适配器模式介绍

    定义

    适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,其别名为包装器(Wrapper)。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

  • 相关阅读:
    Lightoj 1321 Sending Packets(Bellman-Ford)
    Lightoj 1281 New Traffic System (记忆化Dijkstra)
    NBUT TNT #1 题解报告
    UVA 11624 BFS
    FZU 2150 枚举+BFS
    POJ 3126 BFS
    POJ 3279 DFS
    POJ 1062 dijkstra + 枚举
    lightoj 1123 增量最小生成树
    python 常用算法及解析
  • 原文地址:https://www.cnblogs.com/zqunor/p/10771210.html
Copyright © 2011-2022 走看看