日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

设计模式 - 适配器模式

發(fā)布時(shí)間:2025/4/14 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式 - 适配器模式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

場(chǎng)景

  • 現(xiàn)實(shí)場(chǎng)景:國(guó)內(nèi)電壓是 220v,外國(guó)部分國(guó)家是 110v,如果去出差,會(huì)需要攜帶兩個(gè)電源適配器,以應(yīng)對(duì)這兩種不同的電壓。
  • 數(shù)據(jù)庫(kù)場(chǎng)景:每種編程語(yǔ)言都需要支持多種數(shù)據(jù)庫(kù),通常會(huì)抽象一層數(shù)據(jù)庫(kù)連接層,例如 Java 的 JDBC,PHP 的 PDO。數(shù)據(jù)庫(kù)連接層對(duì)應(yīng)用開(kāi)發(fā)人員提供標(biāo)準(zhǔn)接口,屏蔽了數(shù)據(jù)庫(kù)底層的差異。數(shù)據(jù)庫(kù)提供的接口則是千差萬(wàn)別的。所以,數(shù)據(jù)庫(kù)連接層又拆分為兩層,一層對(duì)外提供服務(wù),一層用于連接不同的數(shù)據(jù)庫(kù)。
  • 具體代碼場(chǎng)景:想使用一個(gè)已經(jīng)完成的類(lèi),但是它的接口不符合需求。

假設(shè)已經(jīng)有可以提供服務(wù)的目標(biāo)類(lèi),客戶類(lèi)訪問(wèn)目標(biāo)類(lèi)時(shí),發(fā)現(xiàn)其提供的接口不滿足需求。此時(shí)在客戶類(lèi)和目標(biāo)類(lèi)中間加一層抽象,使不能直接交互的類(lèi)可以一起工作。

定義一個(gè)包裝類(lèi),包裝不兼容接口的對(duì)象,這個(gè)包裝類(lèi)指的就是適配器(Adapter),它所包裝的對(duì)象就是適配者(Adaptee),即被適配的類(lèi)。

模式定義

將一個(gè)接口轉(zhuǎn)換成客戶希望的另一個(gè)接口,使接口不兼容的那些類(lèi)可以一起工作。

模式特點(diǎn)

適配器模式包含四個(gè)角色:

Target:目標(biāo)抽象類(lèi),定義接口標(biāo)準(zhǔn),客戶端可以直接調(diào)用
Adapter:適配器類(lèi),適配 Adaptee 與 Target,使其可以協(xié)同工作
Adaptee:適配者類(lèi),需要進(jìn)行適配的接口
Client:客戶類(lèi)

適配器模式包括兩種:

  • 類(lèi)結(jié)構(gòu)型適配器:繼承關(guān)系,Adapter 同時(shí)繼承 Target 和 Adaptee 類(lèi)。
  • 對(duì)象結(jié)構(gòu)型適配器:關(guān)聯(lián)關(guān)系,Adapter 繼承 Target,關(guān)聯(lián) Adaptee。

優(yōu)點(diǎn)

  • 符合“開(kāi)閉原則”,可以用配置文件方便地更換適配器
  • 解耦,通過(guò)引入一個(gè)適配器類(lèi)來(lái)重用現(xiàn)有的適配者類(lèi)

類(lèi)適配器模式優(yōu)點(diǎn):

  • Adapter 是 Adaptee 的子類(lèi),因此可以在 Adapter 中置換一些 Adaptee 的方法,使得適配器的靈活性更強(qiáng)。

對(duì)象適配器模式優(yōu)點(diǎn):

  • 允許一個(gè) Adapter 與多個(gè) Adaptee 同時(shí)工作

缺點(diǎn)

類(lèi)適配器模式的缺點(diǎn):

  • 對(duì)于不支持多繼承的語(yǔ)言,一次最多只能適配一個(gè) Adaptee,其使用有一定的局限性,不能將 Adaptee 和它的子類(lèi)都適配到目標(biāo)接口。當(dāng)我們想要匹配一個(gè)類(lèi)以及所有它的子類(lèi)時(shí),類(lèi) Adapter 不能勝任工作。

對(duì)象適配器模式的缺點(diǎn):

  • 重定義 Adaptee 的行為比較困難。

PHP 代碼示例

類(lèi)適配器模式

<?phpinterface Target {public function query(); }class Adapter extends Adaptee implements Target {public function del() {echo "can not delete<br/>";} }class Adaptee {public function query() {echo "Adaptee query<br/>";} }class Client {public function test() {$adapter = new Adapter();$adapter->query();$adapter->del();} }$c = new Client(); $c->test();

輸出:

Adaptee query can not delete

對(duì)象適配器模式

<?phpinterface Target {public function query(); }class Adapter implements Target {private $adaptee;public function __construct(Adaptee $adaptee) {$this->adaptee = $adaptee;}public function query() {echo $this->adaptee->query();}public function del() {echo "can not delete<br/>";} }class Adaptee {public function query() {echo "Adaptee query<br/>";} }class Client {public function test() {$adaptee = new Adaptee();$adapter = new Adapter($adaptee);$adapter->query();$adapter->del();} }$c = new Client(); $c->test();

輸出:

Adaptee query can not delete

轉(zhuǎn)載于:https://www.cnblogs.com/kika/p/10851563.html

總結(jié)

以上是生活随笔為你收集整理的设计模式 - 适配器模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。