摘要:簡介適配器模式有時候也稱包裝樣式或者包裝將一個類的接口適配成用戶所期待的。應(yīng)用場景如程序數(shù)據(jù)庫有關(guān)聯(lián)等操作,而你需要根據(jù)情況換數(shù)據(jù)庫操作時,可以使用適配器模式統(tǒng)一接口,這樣代碼中除了數(shù)據(jù)庫配置之外,就不需要做而外的更改。
簡介
適配器模式(有時候也稱包裝樣式或者包裝)將一個類的接口適配成用戶所期待的。一個適配允許通常因為接口不兼容而不能在一起工作的類工作在一起。
UML 角色Target適配目標 : 該角色定義把其他類轉(zhuǎn)換為何種接口,也就是我們的期望接口。
Adaptee被適配者 :就是需要被適配的接口。
Adapter適配器:其他的兩個角色都是已經(jīng)存在的角色,而適配器角色是需要新建立的,它用來對Adaptee與Target接口進行適配。
應(yīng)用場景如程序數(shù)據(jù)庫有關(guān)聯(lián)mysql、mysqli、pdo、sqlite、postgresql等操作,而你需要根據(jù)情況換數(shù)據(jù)庫操作時,可以使用適配器模式統(tǒng)一接口,這樣代碼中除了數(shù)據(jù)庫配置之外,就不需要做而外的更改。
同理cache(緩存)的場景也是,無論使用memcache還是redis等,在更換的時候都會很方便,節(jié)約時間。
注:在一些流行框架中都可以看到此模式,詳情請自行參閱框架源碼。
實現(xiàn)代碼:
connect = $connect;
//其他操作
}
/**
* 實現(xiàn)查詢方法
*
* @param $sql 需要被查詢的sql語句
* @return mi
*/
public function query($sql)
{
return mysql_query($sql);
}
// 實現(xiàn)關(guān)閉方法
public function close()
{
mysql_close();
}
}
/**
* Class Mysql 適配器
*/
class Mysql_i implements IDatabase
{
protected $connect; // 連接資源
/**
* 實現(xiàn)連接方法
*
* @param $host host
* @param $username 用戶名
* @param $password 密碼
* @param $database 數(shù)據(jù)庫名
*/
public function connect($host, $username, $password, $database)
{
$connect = mysqli_connect($host, $username, $password, $database);
$this->connect = $connect;
//其他操作
}
/**
* 實現(xiàn)查詢方法
*
* @param $sql 需要被查詢的sql語句
*/
public function query($sql)
{
return mysqli_query($this->connect, $sql);
}
// 實現(xiàn)關(guān)閉
public function close()
{
mysqli_close($this->connect);
}
}
/**
* Class Postgresql 適配器
*/
class Postgresql implements IDatabase
{
protected $connect; // 連接資源
/**
* 實現(xiàn)連接方法
*
* @param $host
* @param $username
* @param $password
* @param $database
*/
public function connect($host, $username, $password, $database)
{
$this->connect = pg_connect("host=$host dbname=$database user=$username password=$password");
//其他操作
}
/**
* 實現(xiàn)查詢方法
*
* @param $sql 需要被查詢的sql語句
*/
public function query($sql)
{
// 其他操作
}
// 實現(xiàn)關(guān)閉方法
public function close()
{
}
}
/**
* 客戶端使用演示
* 這里以mysql為例
* 只要模式設(shè)計好,不論有多少種數(shù)據(jù)庫,實現(xiàn)和調(diào)用方式都是一樣的
* 因為都是實現(xiàn)的同一個接口,所以都是可以隨意切換的
*/
$host = "localhost";
$username = "root";
$password = "root";
$database = "mysql";
//$client = new Postgresql();
//$client = new Mysql();
$client = new Mysql_i();
$client->connect($host, $username, $password, $database);
$result = $client->query("select * from db");
while ($rows = mysqli_fetch_array($result)) {
var_dump($rows);
}
$client->close();
運行結(jié)果:
array(44) {
[0]=>
string(1) "%"
["Host"]=>
string(1) "%"
[1]=>
string(4) "test"
["Db"]=>
string(4) "test"
[2]=>
string(0) ""
["User"]=>
string(0) ""
[3]=>
string(1) "Y"
["Select_priv"]=>
string(1) "Y"
[4]=>
string(1) "Y"
["Insert_priv"]=>
string(1) "Y"
[5]=>
string(1) "Y"
["Update_priv"]=>
string(1) "Y"
[6]=>
string(1) "Y"
["Delete_priv"]=>
string(1) "Y"
[7]=>
string(1) "Y"
["Create_priv"]=>
string(1) "Y"
[8]=>
string(1) "Y"
["Drop_priv"]=>
string(1) "Y"
[9]=>
string(1) "N"
["Grant_priv"]=>
string(1) "N"
[10]=>
string(1) "Y"
["References_priv"]=>
string(1) "Y"
[11]=>
string(1) "Y"
["Index_priv"]=>
string(1) "Y"
[12]=>
string(1) "Y"
["Alter_priv"]=>
string(1) "Y"
[13]=>
string(1) "Y"
["Create_tmp_table_priv"]=>
string(1) "Y"
[14]=>
string(1) "Y"
["Lock_tables_priv"]=>
string(1) "Y"
[15]=>
string(1) "Y"
["Create_view_priv"]=>
string(1) "Y"
[16]=>
string(1) "Y"
["Show_view_priv"]=>
string(1) "Y"
[17]=>
string(1) "Y"
["Create_routine_priv"]=>
string(1) "Y"
[18]=>
string(1) "N"
["Alter_routine_priv"]=>
string(1) "N"
[19]=>
string(1) "N"
["Execute_priv"]=>
string(1) "N"
[20]=>
string(1) "Y"
["Event_priv"]=>
string(1) "Y"
[21]=>
string(1) "Y"
["Trigger_priv"]=>
string(1) "Y"
}
從以上結(jié)果可看出,數(shù)據(jù)庫連接以及查詢語句都已經(jīng)執(zhí)行成功。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://hztianpu.com/yun/22059.html
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:適配器模式只要應(yīng)用于希望復(fù)用一些現(xiàn)存的類,但接口又與復(fù)用環(huán)境要求不一致的情況這是一種亡羊補牢的方法。首選的方法應(yīng)該是重構(gòu)代碼,統(tǒng)一接口。 定義 將某個對象的接口適配為另一個對象所期望的接口,adapter模式使原本由于接口不兼容而不能一起工作的類可以一起工作 使用場景 需要的東西在面前,但卻不能用,而短時間又無法改造它,于是就想辦法適配 系統(tǒng)的數(shù)據(jù)和行為都正確,但接口不符時,應(yīng)該考慮...
摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰(zhàn)) 這篇文章主要介紹利用 R...
摘要:序列文章面試之函數(shù)面試之對象面試之?dāng)?shù)組的幾個不操作面試之對比分析面試之?dāng)?shù)據(jù)結(jié)構(gòu)與算法前言設(shè)計模式如果應(yīng)用到項目中,可以實現(xiàn)代碼的復(fù)用和解耦,提高代碼質(zhì)量。 showImg(https://segmentfault.com/img/bVbq2VA?w=480&h=260); 序列文章 JS面試之函數(shù)(1)JS面試之對象(2)JS面試之?dāng)?shù)組的幾個不low操作(3)JS面試之http0.9~...
閱讀 1099·2021-11-22 14:56
閱讀 1160·2021-11-11 16:54
閱讀 8509·2021-09-23 11:55
閱讀 3101·2021-09-22 15:57
閱讀 2851·2021-08-27 16:25
閱讀 742·2019-08-30 15:55
閱讀 1710·2019-08-30 15:43
閱讀 1660·2019-08-30 14:23