適配器模式是最容易理解的設計模式之一,應用也很普遍,常見的應用場景有數據庫底層鏈接的封裝和高速緩存類底層封裝等等,在開源程序中常見框架都有適配器模式的應用,例如thinkphp中模型基類封裝的數據鏈接。我爲本身網站(www.ruanpower.com)設計的框架LEAFMVC中模型層封裝數據庫也用到了適配器模式。php
一句話描述:適配器就是利用繼承,暴露相同接口。mysql
做用:一個適配容許一般由於接口不兼容而不能在一塊兒工做的類工做在一塊兒,暴露共同的接口去調用sql
組成方式:1個接口(指定被暴露的共同方法),若干具體實現thinkphp
僞代碼演示:設計一個無縫切換mysqli數據庫鏈接或者pdo數據庫鏈接的程序,業務邏輯無需瞭解底層數據庫的鏈接方式,只須要調用db對象方法便可數據庫
//數據庫接口 interface IDb { //鏈接數據庫 function connect(); function query(); function exec(); function select(); function insert(); function delete(); function update(); }
//mysqli模式數據庫鏈接適配器 class MysqliAdapter implements IDb { function connect() { //youcode } function query() { //youcode } function exec() { //youcode } function select() { //youcode} } function insert() { //youcode} } function delete() { //youcode} } function update() { //youcode} } }
//pdo模式數據庫鏈接適配器 class PdoAdapter implements IDb { function connect() { //youcode } function query() { //youcode } function exec() { //youcode } function select() { //youcode} } function insert() { //youcode} } function delete() { //youcode} } function update() { //youcode} } }
//你本身的業務邏輯 class Business { public $db; public function __construct() { $this->dbFactory('pdo'); } //你本身的方法 function business() { $sql = "SELECT * FRROM user WHERE nickname = 'mgckid' "; $result = $this->db->select($sql); return $result; } //數據庫工廠方法(勉強稱之爲) private function dbFactory($dbtype) { switch ($dbtype) { case 'mysqli': $this->db = new MysqliAdapter(); break; case 'pdo': $this->db = new PdoAdapter(); break; } } }
//獲取結果 $business = new business(); $data = $business->business();