摘要:原文地址設(shè)計模式十適配器模式在設(shè)計模式七設(shè)計模式分類中我們提到過結(jié)構(gòu)設(shè)計模式,結(jié)構(gòu)設(shè)計模式專注于設(shè)計對象和實例的構(gòu)建組合過程。適配器模式在不修改現(xiàn)有代碼的基礎(chǔ)上,保留了架構(gòu)。
Introduction原文地址:PHP設(shè)計模式(十):適配器模式
在PHP設(shè)計模式(七):設(shè)計模式分類中我們提到過結(jié)構(gòu)設(shè)計模式(Structural patterns),結(jié)構(gòu)設(shè)計模式專注于設(shè)計對象(Object)和實例(Instance)的構(gòu)建、組合過程。
結(jié)構(gòu)設(shè)計模式包括下面七種設(shè)計模式:
適配器(Adapter)
橋接(Bridge)
合成(Composite)
裝飾(Decorator)
外部(Facade)
輕量(Flyweight)
代理(Proxy)
請無視拗口的中文翻譯。結(jié)構(gòu)設(shè)計模式著重于低耦合、高復(fù)用、高可維護(hù)性、高拓展性的設(shè)計原則。
適配器模式適配器模式是一種利用適配器將現(xiàn)有的實現(xiàn),適配到已有接口的設(shè)計模式,最常見的例子就是變壓器,將已有的5V輸入的電器,通過變壓器,適配到220V的電源插座。
適配器模式利用PHP設(shè)計模式(四):繼承中我們提到過的繼承(inheritance),以及PHP設(shè)計模式(六):MVC中我們提到過的組件(composition)來進(jìn)行模式設(shè)計。
相比繼承,組件可用性高,低耦合,冗余度低,因此推薦采用組件的模式來進(jìn)行設(shè)計。
簡單來說,當(dāng)你的實現(xiàn)和需要的接口,都無法修改的時候。
例如,你需要給甲方已有的系統(tǒng)做標(biāo)準(zhǔn)的兼容,標(biāo)準(zhǔn)不可修改,甲方的系統(tǒng)也不可修改,這個時候你就需要適配器的設(shè)計模式了。
對于web編程來說,將你現(xiàn)有的實現(xiàn),和三方庫結(jié)合起來,就需要使用適配器模式。
簡單來說,就是:
還是用前面的鯨魚和鯉魚的例子來說明如何使用適配器,假設(shè)我們已經(jīng)實現(xiàn)了鯨魚類和鯉魚類:
name = "Whale"; } public function eatFish() { echo "Whale eat fish. "; } } class Carp { public function __construct() { $this->name = "Carp"; } public function eatMoss() { echo "Carp eat moss. "; } } ?>
假設(shè)我們現(xiàn)在需要建一個動物館,有eatFish()和eatMoss()接口,動物館接口如下:
但是我們不能修改Whale和Carp類,這里就需要使用適配器了,創(chuàng)建兩個適配器:
name = "Whale"; } public function eatMoss() { echo "Whale don"t eat moss. "; } } class CarpAdapter extends Carp implements Animal { public function __construct() { $this->name = "Carp"; } public function eatFish() { echo "Carp don"t eat moss. "; } } ?>
然后是調(diào)用代碼:
eatFish(); $whaleAdapter->eatMoss(); $carpAdapter = new CarpAdapter(); $carpAdapter->eatMoss(); $carpAdapter->eatFish(); ?>
運(yùn)行一下:
Whale eat fish. Whale don"t eat moss. Carp eat moss. Carp don"t eat moss.使用組件的適配器模式
還是使用鯨魚和鯉魚的例子,不過這個時候適配器變成了:
name = "Whale"; $this->whale = new Whale(); } public function eatFish() { $this->whale->eatFish(); } public function eatMoss() { echo "Whale don"t eat moss. "; } } class CarpAdapter implements Animal { public function __construct() { $this->name = "Carp"; $this->carp = new Carp(); } public function eatFish() { echo "Carp don"t eat moss. "; } public function eatMoss() { $this->carp->eatMoss(); } } ?>
其他的地方和使用繼承的適配器模式一樣,這里不再贅述。
Summary適配器模式在不修改現(xiàn)有代碼的基礎(chǔ)上,保留了架構(gòu)。使用繼承的適配器和使用組件的適配器各有利弊,繼承的類冗余度/空間復(fù)雜度偏高,組件的調(diào)用棧/時間復(fù)雜度偏高,應(yīng)該結(jié)合實際情況選擇。
(本文出自csprojectedu.com,轉(zhuǎn)載請注明出處)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21716.html
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進(jìn)行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:我們今天也來做一個萬能遙控器設(shè)計模式適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。今天要介紹的仍然是創(chuàng)建型設(shè)計模式的一種建造者模式。設(shè)計模式的理論知識固然重要,但 計算機(jī)程序的思維邏輯 (54) - 剖析 Collections - 設(shè)計模式 上節(jié)我們提到,類 Collections 中大概有兩類功能,第一類是對容器接口對象進(jìn)行操作,第二類是返回一個容器接口對象,上節(jié)我們介紹了...
摘要:分別為適配器模式,裝飾器模式,代理模式,外觀模式,橋接模式,組合模式,享元模式。設(shè)計模式五適配器模式適配器模式將某個對象的接生成器和協(xié)程的實現(xiàn)在這篇文章中,作者針對那些比較難以理解的概念,以一個更為通俗的方式去講明白。。 PHP 源碼注解 PHP 的詳細(xì)源碼注解 PHP 字符串操作整理 一些有關(guān)字符串的常用操作。 Redis 常見七種使用場景 (PHP 實戰(zhàn)) 這篇文章主要介紹利用 R...
摘要:適配器模式是指將一個接口轉(zhuǎn)換成客戶端希望的另外一個接口,該模式使得原本不兼容的類可以一起工作。適配器有種角色目標(biāo)抽象角色定義客戶所期待的使用接口。接口源角色需要被適配的接口。接口適配器角色把源接口轉(zhuǎn)換成符合要求的目標(biāo)接口的設(shè)備。 適配器模式 是指將一個接口轉(zhuǎn)換成客戶端希望的另外一個接口,該模式使得原本不兼容的類可以一起工作。舉個例子:macbook pro有一個HDMI接口,一條HDM...
摘要:適配器模式將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作。如下待適配對象電子書翻頁電子書打開客戶端測試輸出結(jié)果電子書打開電子書翻頁 適配器模式:將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口,使得原本由于接口不兼容而不能一起工作的那些類可以在一起工作。 showImg(https://segmentfault.com/img/bVbi...
閱讀 3285·2021-11-24 09:39
閱讀 3866·2021-11-22 09:34
閱讀 4799·2021-08-11 11:17
閱讀 1060·2019-08-29 13:58
閱讀 2571·2019-08-28 18:18
閱讀 537·2019-08-26 12:24
閱讀 825·2019-08-26 12:14
閱讀 727·2019-08-26 11:58