设计模式之适配器模式

BAT 批处理程序 2017-04-21

概念

      将不同函数的接口封装成统一的api,每个类必须要实现接口中的方法,eg:操作mysql数据库有mysql,PDO,MySQLi三种,可以将三种分装成统一的接口,再例如cache适配器,将memeche ,redis ,file,apc等不同的缓存函数分装成统一的接口。

实现

先定义一个接口,让每一类都实现这一个接口

//定义接口
interface  Adapter
{
    public function connect();

    public function close();

    public function query();
    //还以定义很多,也就是增删改查
}

定义mysqli操作数据库类,实现Adapter接口

class MyMysqli implements Adapter
{
    protected $connect;

    public function connect()
    {
        // TODO: Implement connect() method.
        $this->connect = mysqli_connect('127.0.0.1', 'root', '');
        mysqli_select_db($this->connect, 'mysql');
        return $this->connect;
    }

    public function query()
    {
        // TODO: Implement query() method.
        return mysqli_query($this->connect, 'show tables');
    }

    public function close()
    {
        // TODO: Implement close() method.
        mysqli_close($this->connect);
    }
}

定义PDO操作数据库,实现Adapter接口

class MyPDO implements Adapter
{
    protected $connect;

    public function connect()
    {
        // TODO: Implement connect() method.
        $this->connect = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', '');
    }

    public function query()
    {
        // TODO: Implement query() method.
        return $this->connect->query("show tables");
    }

    public function close()
    {
        // TODO: Implement close() method.
        unset($this->connect);
    }
}

在要操作数据库的地方直接调用

$pdo = new \MyMysqli();
$pdo->connect();
$pdo->query();

写了怎么就感觉是实现相同的接口呢。有点纳闷。

视频连接免费:http://www.imooc.com/learn/236

相关推荐