适配器模式
Posted waterliang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了适配器模式相关的知识,希望对你有一定的参考价值。
概念:把不同的接口封装成统一的api
实例: 这里以数据库连接为例
首先定义一个接口来约束数据库类必须实现的方法:DatabaseInterFace.php
<?php namespace app; /** * 数据库连接接口 * Interface DatabaseInterFace * @package app */ interface DatabaseInterFace { /** * 数据库连接 * @param $host string 地址 * @param $user string 用户名 * @param $password string 密码 * @param $dbName string 数据库名 * @return mixed */ public function connect($host, $user, $password, $dbName); /** * 执行sql * @param $sql string 执行语句 * @return mixed */ public function query($sql); /** * 关闭数据库连接 * @return mixed */ public function close(); }
开始定义数据库连接类:
以mysql.php为例
<?php namespace appdriver; /** * Mysql连接类 * Class Mysql * @package appdriver */ class Mysql implements appDatabaseInterFace { protected $conn; /** * 数据库连接 * @param $host string 地址 * @param $user string 用户名 * @param $password string 密码 * @param $dbName string 数据库名 * @return mixed */ public function connect($host, $user, $password, $dbName) { // 这里把数据库连接代码加上 } /** * 执行sql * @param $sql string 执行语句 * @return mixed */ public function query($sql) { // 这里要把实际代码补上 } /** * 关闭数据库连接 * @return mixed */ public function close() { // 这里要把实际代码补上 } }
图中Mysqli.php和PDO.php和上面的Mysql.php文件一样,也是要实现connect、query、close方法,只是各自的连接代码写法不一样(这个和thinkphp5的数据库连接驱动类似)
定义好了数据库连接类,开始在index.php中调用
<?php // 定义自动注册 spl_autoload_register(function ($class) { include $class . ‘.php‘; }); // 调用数据库连接类 // 说明:由于数据库连接我们都定义成一样的方法了,所以这里可以根据自己的需要把Mysql连接类换成PDO或者Mysqli或者其他,这就凸现了适配器的作用 $database = new appdriverMysql(); // 连接数据库 $dbConn = $database->connect(‘127.0.0.1‘, ‘root‘, ‘root‘, ‘test‘); // 执行sql $res = $dbConn->query(‘select * from t_study limit 1‘); // 关闭数据库连接 $dbConn->close();
到此就完成了
以上是关于适配器模式的主要内容,如果未能解决你的问题,请参考以下文章