設計模式 之 Adapter

2021-08-27 09:27:18 字數 900 閱讀 4876

基礎幾何影象物件(如直線、矩形)是很容易實現的,但文字物件就比較複雜了,其中涉及到了文字格式、段落格式、螢幕更新、快取管理等諸多內容。如果此時正好有乙個成熟的文字繪製工具包可供使用,這個工具包中的textview物件提供了完整的文字格式、段落、螢幕及快取管理,實現了textshape物件需要實現的一些職責。

是否可復用呢?如何復用?

既然這樣,我們可以定義乙個textapapter物件,它負責textview和textshape之間的差異協調。textshape用textadapter(繼承或組合),textadapter用textview(繼承或組合)。關係如下圖:

這種結構,實際上就是adapter模式。當然,如果textadapter本身需要做的事情很少,也可以直接用textshape兼職adaper。 

上例中通過繼承實現adaper模型(textshape繼承textadapter,textadapter繼承textview),也可以通過組合的方式實現。這兩種方式也被稱為class adapter(類介面卡)object adapter(物件介面卡)。以下用類圖描述這兩種結構:

1. 類介面卡

2. 物件介面卡

不同於類介面卡,物件介面卡使用的是組合的方式代替了繼承(adapter有指向adaptee的引用,而不是adapter繼承adaptee)。

1. 類介面卡

2. 物件介面卡

target:滿足client使用要求的功能介面/類(textshape)。

adaptee:已有的功能匹配但介面形式不匹配的類(textview)。

adapter:adaptee和target的協調者(textadatper)。

設計模式之Adapter模式

adapter的意圖可以這樣表述 將乙個類的介面轉換成客戶希望的另外乙個介面。adapter模式使原來由於介面不相容而不能一起工作的類可以一起工作。採用adapter模式是源於這樣的問題 原有系統的資料和行為都正確,但介面不符。通常用於必須從抽象類派生時。其實現方式是將原有類包含在另乙個類中 組合方...

玩轉設計模式之Adapter

玩轉設計模式之 adapter 設計模式很重要,地球人都知道。adapter 介面卡或者叫轉換器,這種模式主要用來將某乙個類的介面轉換成另外乙個類的介面。其實現起來也很簡單,就是新建乙個類,讓其實現所需要的介面,而其實現的過程是完全依賴於原需要被 adapt 的類的。這和我們現實生活中的各類介面卡非...

設計模式之 Adapter例項

include memory include iostream class t1 class t2 class iadaptor,抽象基類 class iadaptor class adaptor template class adaptor public iadaptor,private t 實現...