目的
Convert the interface of a class into another interface clients
expect. Adapter lets classes work together that couldn't otherwise
because of incompatible interfaces.
(將類別的界面轉換成外界所預期的另一種介面,讓原先囿於介面不相容問題而無法協力合作的類別能夠兜在一起用。[1])Adapter 是一個結構模式,它能夠轉換既有的介面成為我們預期的介面,也被叫做 Wrapper。
Adapter 應用十分廣泛,只要曾經嘗試使用 Third-party Library 或者以前寫過的 codes,就能夠應用 Adapter 去符合現在的需求。
Adapter 實作方法有二:
- Class Adapter:利用多重繼承實作
- Object Adapter:利用物件複合(object composition)實作
Adapter 的 UML Class Diagram:
主要優缺點:
- Class Adapter:可以 override Adaptee 原有的行為,但只能轉換單一的 Adaptee,無法動態更換。
- Object Adapter:可動態轉換不同的 Adaptee,但無法 override Adaptee 原有的行為。
範例程式:
範例程式與 Class Diagram 的對應關係:
- Client <==> Canvas
- Target <==> Rectangle
- Adapter <==> RectangleAdapter, RectangleClassAdapter, and RectangleObjectAdapter
- Adaptee <==> LegacyRectangle
[1] "物件導向設計模式", Gamma, Johnson, Helm, Vlissides 著, 葉秉哲譯
[2] "Prototype:物件原型複製者", 猴子靈藥, http://www.cnblogs.com/oomusou/archive/2007/07/16/820023.html
[2] "Prototype:物件原型複製者", 猴子靈藥, http://www.cnblogs.com/oomusou/archive/2007/07/16/820023.html
沒有留言:
張貼留言