今天介紹的Adapter Pattern是屬於結構型模式,以字面上來說不難猜到它是用來讓物件與物件之間能夠協同合作,至於它是怎麼運作的,現在就一起來認識吧!
舉一個最貼近生活的例子,那就是充電頭與插座,每當要出國的時候,行李裡面一定要有的是手機充電器,不過每個國家的充電插座規格都不盡相同,為了要讓我們的充電頭與插座可以相容,就一定要有特定的轉接頭,才能讓手機充電。
Adapter的角色就是一個轉接頭,為了讓充電頭可以符合其他國家的插座規格,就得需要有符合該插座的充電頭(Adaptee)的行為模式(method),使原本的充電頭可以套用,如此來達到使用者的目的,也就是在其他國家充電。
再來Adapter有分成兩種,一個是Object Adapter,另一個則是Class Adapter,前者實現了一個物件的介面並包含另一個;而後者須用多重繼承來實現它,也就是要用支援多重繼承的程式語言來實現,如果還不是很清楚的話,可以看以下的Class Diagram來了解他們之間微妙的差異。
interface Target {
public void operation();
}
class Target1 implements Target {
public void operation() {
// do something
}
}
class Adapter implements Target {
Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void operation() {
adaptee.specialOperater();
}
}
class Adaptee {
public void specialOperater() {
// do something
}
}
因為有許多程式語言都不支援多重繼承,所以上面的程式碼範例使用的是Object Adapter。當遇到某些功能無法添加到父類別來讓子類別重用時,就可以將這些缺少的功能放到Adapter內,來滿足子類別。
除此之外,也歡迎大家走走逛逛關於我們團隊夥伴的文章
juck30808 - Python - 數位行銷分析與 Youtube API 教學
SiQing47 - 前端?後端?你早晚都要全端的,何不從現在開始?