PHP-介面卡模式

lemon_lyue發表於2020-06-11

什麼是介面卡模式

介面卡模式(Adapter Pattern)是作為兩個不相容的介面之間的橋樑。這種型別的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。

這種模式涉及到一個單一的類,該類負責加入獨立的或不相容的介面功能。

舉個例子:

PHP常用的運算元據庫的方法有三種:MySQL、MySQLi和PDO,需要怎麼去適配呢,又或者說,還有Oracle、非關係型資料庫(Memcache、Redis)又怎麼去適配呢。

介面卡模式的實現


<?php

/**

 * 資料庫介面卡

 * Interface DatabaseAdapter

 */

interface DatabaseAdapter

{

    /**

     * 連線資料庫

     * @param string $host

     * @param int $port

     * @param string $username

     * @param string $password

     * @param string $dbname

     * @return mixed

     */

    public function connect(string $host, int $port, string $username, string $password, string $dbname);

    /**

     * 執行sql

     * @param string $sql

     * @return mixed

     */

    public function query(string $sql);

    /**

     * 關閉連線

     * @return mixed

     */

    public function close();

}

/**

 * Class MySQLi

 */

class MySQLi implements DatabaseAdapter

{

    /**

     * 連線資料庫

     * @param string $host

     * @param int $port

     * @param string $username

     * @param string $password

     * @param string $dbname

     * @return mixed

     */

    public function connect(string $host, int $port, string $username, string $password, string $dbname)

    {

        // TODO: Implement connect() method.

    }

    /**

     * 執行sql

     * @param string $sql

     * @return mixed

     */

    public function query(string $sql)

    {

        // TODO: Implement query() method.

    }

    /**

     * 關閉連線

     * @return mixed

     */

    public function close()

    {

        // TODO: Implement close() method.

    }

}

/**

 * Class MySQL

 */

class MySQL implements DatabaseAdapter

{

    /**

     * 連線資料庫

     * @param string $host

     * @param int $port

     * @param string $username

     * @param string $password

     * @param string $dbname

     * @return mixed

     */

    public function connect(string $host, int $port, string $username, string $password, string $dbname)

    {

        // TODO: Implement connect() method.

    }

    /**

     * 執行sql

     * @param string $sql

     * @return mixed

     */

    public function query(string $sql)

    {

        // TODO: Implement query() method.

    }

    /**

     * 關閉連線

     * @return mixed

     */

    public function close()

    {

        // TODO: Implement close() method.

    }

}

/**

 * Class PDO

 */

class PDO implements DatabaseAdapter

{

    /**

     * 連線資料庫

     * @param string $host

     * @param int $port

     * @param string $username

     * @param string $password

     * @param string $dbname

     * @return mixed

     */

    public function connect(string $host, int $port, string $username, string $password, string $dbname)

    {

        // TODO: Implement connect() method.

    }

    /**

     * 執行sql

     * @param string $sql

     * @return mixed

     */

    public function query(string $sql)

    {

        // TODO: Implement query() method.

    }

    /**

     * 關閉連線

     * @return mixed

     */

    public function close()

    {

        // TODO: Implement close() method.

    }

}

更多內容關注個人部落格:lemonlyue.github.io/

本作品採用《CC 協議》,轉載必須註明作者和本文連結

lemon_lyue

相關文章