我的Design Pattern之旅[6]:Adapter Pattern(OO)2010-03-29 cnblogs Abstract在OO設計裡,我們常會定下interface要求其他class必須實現此interface,以便彼此溝通,若是新開發的專案,問題就不大;若既有的framework/library中,已經有符合需求的class,但唯一可惜的是,『因為interface並不相同』,導致無法和我的class合作,此時可使用Adpater Pattern解決。Intent将class的interface转换成外界所预期的另一种interface,让原先囿於interface不相容问题而无法协力合作的class能够兜再一起用[1]。Introductionadapter中文为转换器、转接器,主要的目的就是将不相容的interface做转换。现实生活中,处处可以看到adapter,如Notebook内部使用的是DC(直流电),但插头提供的是AC(交流电),所以必须使用AC to DC adapter将交流电转换成直流电,Notebook才能使用;又如现在很多Notebook并没有COM port,取而代之的是USB port,但很多嵌入式系统开发版必须使用COM port才能与PC连接,因此就有USB to COM的adapter,让Notebook可以和开发版做连接。OO设计也是如此,若interface不相容,则可透过Adapter Pattern解决。Structure[1]Class Adapter (使用继承技术)

Object Adapter (使用组合技术)

Participants[1]Client与符合ITarget interface的object合作。ITarget定义Client所用的与应用领域相关之interface。Adaptee需要被转换的既有interface。Adapter将Adaptee转换成ITarget interface。CollaborationsClient呼叫Adapter的method,Adapter再去呼叫Adaptee的method完成任务[1]。