【高階之路】理解結構型模式開發(橋接模式)之前的文章,我們講過橋接模式。橋接模式是我們**裡抽象與現實之間的橋梁,而今天要講的介面卡模式,則可以理解為不相容的介面(類)之間的橋梁,就像讀卡器至於手機卡(現在已經沒有手機卡了吧),轉接頭之於html線一樣。【高階之路】理解結構型模式開發(享元模式)
介面卡模式:
將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類能一起工作。介面卡模式分為類結構型模式和物件結構型模式兩種,前者類之間的耦合度比後者高,且應用相對較少些。
介面卡模式的優點:
1、客戶端通過介面卡可以透明地呼叫目標介面。
2、復用了現存的類,不需要修改原有**而重用現有的適配者類。
3、將目標類和適配者類解耦,解決了目標類和適配者類介面不一致的問題。
介面卡模式的缺點:
1、介面卡編寫過程需要結合業務場景全面考慮,可能會增加系統的複雜性。
2、增加**閱讀難度,降低**可讀性,過多使用介面卡會使系統**變得凌亂。
在實際的工作中,有時候會出現公司合併或者收購別的公司的情況(確信),這個時候,就會把其他公司的**給接收過來,如果遇到相同相似的模組,往往會需要**合併,介面卡模式使得原本由於介面不相容而不能一起工作的那些類可以一起工作。或是在使用第三方提供的元件,但元件介面定義和自己要求的介面定義不同,使用介面卡模式來解決這個問題。亦或是以前開發的系統存在滿足新系統功能需求的類,但其介面同新系統的介面不一致。
以上種種情況,都是我們使用介面卡模式的理由。
再提一句:設計模式就是前人經驗的結晶,每一種設計模式都解決了特定的問題,使用這些設計模式就是站在了前人的肩膀上。設計模式更多的是讓我們學習前人的經驗,而不是為了用而用,為了炫技而炫技。
介面卡模式的主要角色:
目標介面:當前系統業務所期待的介面,它可以是抽象類或介面。
適配者類:它是被訪問和適配的現存元件庫中的元件介面。
介面卡類:它是乙個轉換器,通過繼承或引用適配者的物件,把適配者介面轉換成目標介面,讓客戶按目標介面的格式訪
問適配者。
1、目標介面
public inte***ce smoke
2、適配者類public class guangdongsmoke implements smoke
@override
public void sellsmoke()
}public class guizhousmoke
}
3、介面卡類public class adapter extends guizhousmoke implements smoke
}
4、測試類public static void main(string args)
上面這種實現的介面卡稱為類介面卡,因為 adapter 類既繼承了 guizhousmoke (被適配類),也實現了 smoke 介面,在測試類中我們可以根據需要選擇並建立任一種符合需求的子類,來實現具體功能。
當然,實際開發中可以參考springmvc的介面卡。
spring定義了乙個適配介面,使得每一種controller有一種對應的介面卡實現類, 讓介面卡代替controller執行相應的方法。這樣在擴充套件controller 時,只需要增加乙個介面卡類就完成了springmvc的擴充套件了
另外一種介面卡模式是物件介面卡,它不是使用繼承再實現的方式,而是使用直接關聯,或者稱為委託的方式。
1、目標介面
public inte***ce smoke
2、適配者類public class guangdongsmoke implements smoke
@override
public void sellsmoke()
}public class guizhousmoke
}
3、介面卡類這一次介面卡類直接關聯被適配類,同時實現標準介面
public class adapter implements smoke
/*** 介面卡類,繼承了被適配類,實現標準介面
* 就相當於通過中間**將貴州的菸草資訊接入廣州
*/@override
public void sellsmoke()
}
4、測試類public static void main(string args)
從ieda的diagrams圖也能看出來,只要adapter自身擁有乙個被適配類的物件,再把具體的特殊功能委託給這個物件來實現。使用物件介面卡模式,可以使得 adapter 類(適配類)根據傳入的 adaptee 物件達到適配多個不同被適配類的功能,當然,此時我們可以為多個被適配類提取出乙個介面或抽象類。這樣看起來的話,物件介面卡模式更加靈活一點。
在 spring 的 aop 裡通過使用的 advice(通知)來增強被**類的功能。spring 實現這一 aop 功能的原理就使用**模式(1、jdk 動態**。2、cglib 位元組碼生成技術**。)對類進行方法級別的切面增強,即,生成被**類的**類,並在**類的方法前,設定***,通過執行***中的內容增強了**方法的功能,實現的面向切面程式設計。
advice(通知)的型別有:beforeadvice、afterreturningadvice、throwsadvice 等。每個型別 advice(通知)都有對應的***,methodbeforeadviceinterceptor、afterreturningadviceinterceptor、throwsadviceinterceptor。spring 需要將每個 advice(通知)都封裝成對應的***型別,返回給容器,所以需要使用介面卡模式對 advice 進行轉換。
介面卡模式主要應用於希望復用一些現存的類,但是介面又與復用環境要求不一致的情況。比如在需要對早期**復用一些功能等應用上很有實際價值。適用場景大致包含三類:
介面卡模式是對現相存系統的封裝,為現存系統提供乙個更為方便的訪問介面。介面卡模式為事後設計,沒有引入新的介面,只是將乙個介面通過適配來間接轉換為另乙個介面。
建立型模式,結構型模式,結構型模式
為了閱讀方便,本文使用 全文手工轉換 轉換內容 本文採用電腦和資訊科技 顯示 關閉 字詞轉換 說明 字詞轉換是中文維基的一項自動轉換,目的是通過電腦程式自動消除繁簡 地區詞等不同用字模式的差異,以達到閱讀方便。字詞轉換包括全域性轉換和手動轉換,本說明所使用的標題轉換和全文轉換技術,都屬於手動轉換。如...
結構型模式 介面卡
結構圖 模式說明 擴充套件點在adaptee類,adaptee可以被其他類替換。客戶端需要知道哪個具體的adapter負責將adaptee轉換成需要的target介面。客戶端不關心具體哪個adaptee被適配和轉換的。將乙個類的介面轉換成客戶希望的另乙個介面,介面卡模式使得原本由於介面不相容而不能一...
結構型模式 介面卡模式
介面卡模式 將乙個類的介面變換成客戶端所期待的另一種介面,從而使原本因介面不匹配而無法在一起工作的兩個類能夠在一起工作。介面卡模式角色目標 targe 角色 該角色定義要轉換成的目標介面 源 adaptee 角色 需要被轉換成目標角色的源角色 介面卡 adapter 角色 該角色是介面卡模式的核心,...