c 設計模式 6 介面卡模式

2022-09-20 00:57:11 字數 2676 閱讀 7510

介面卡模式(adapter pattern)是作為兩個不相容的介面之間的橋梁。這種型別的設計模式屬於結構型模式,它結合了兩個獨立介面的功能。

這種模式涉及到乙個單一的類,該類負責加入獨立的或不相容的介面功能。舉個真實的例子,讀卡器是作為記憶體卡和筆記本之間的介面卡。您將記憶體卡插入讀卡器,再將讀卡器插入筆記本,這樣就可以通過筆記本來讀取記憶體卡。

接下來要說個例子來演示介面卡模式的使用。其中我們一直在使用sqlserver進行增刪查改的操作,突然某一天,感覺效能不行了,想替換成redis這種nosql的增刪查改的方式,但是redis的幫助類的並沒有和sqlserver查詢類的介面命名一致,直接替換成本大,這時就需要乙個中間層來適配,使得原來sqlserver的資料庫操作無縫對接redis資料庫操作。

下面讓我們看看介面卡的定義,介面卡模式——把乙個類的介面變換成客戶端所期待的另一種介面,從而使原本介面不匹配而無法一起工作的兩個類能夠在一起工作。介面卡模式有類的介面卡模式和物件的介面卡模式兩種形式,下面我們先來描述一下類介面卡模式。

1. 在說介面卡前,先展示一下sqlserver幫助類的實現。首先,先定義統一的增刪查改幫助類介面。

/// /// sql幫助抽象類

///

public inte***ce ihelper

2.接著就是sqlserver幫助類實現ihelper介面.

public class sqlserverhelper : ihelper

被構造");

}public void add()

的add正在新增資料");

}public void delete()

的delete正在刪除資料");

}public void query()

的query正在查詢資料");

}public void update()

的update正在更新資料");

}}

3.sqlserver一直用得好好的,現在業務公升級了,資料庫撐不住了,關係型資料庫效能堪憂,redis這種nosql很好,但是有個問題redis有自定義的幫助類,如果需要公升級使用redis,不能直接替換sqlserver的幫助類的介面方法;因為redishelper沒有實現ihelper介面;遇到乙個想要放一起使用但是卻不能一起使用的問題。這時我們的介面卡就要登場了,先演示一下類介面卡。

/// /// redis幫助類,由於執行方法與sql的執行方法不一致,需要適配

///

public class redishelper

被構造");

}public void redisadd()

的redisadd正在新增資料");

}public void redisdelete()

的redisdelete正在刪除資料");

}public void redisquery()

的redisquery正在查詢資料");

}public void redisupdate()

的redisupdate正在更新資料");

}}

/// /// 類介面卡

///

public class redisclasshelper : redishelper, ihelper

public void delete()

public void query()

public void update()

}

class program

}

4. 以上就是類介面卡的實現,但是大家都發現了乙個問題,就是雖然解決redishelper和ihelper不相容的問題,但是因為是強繼承,具有侵入性redisclasshelper只能為redishelper服務,而且想要匹配一      個類以及所有它的子類時,類的介面卡模式就不能勝任了;為了解決這個問題,多了一種物件介面卡,使得適配類可以相容多個不同的物件。

為了證明這一點,我寫乙個繼承了redishelper類的子類

public class redischildhelper: redishelper

然後我寫個物件介面卡

/// /// 物件介面卡

///

public class redisobjhelper : ihelper

public void setredishelper(redishelper redishelper)

public void add()

public void delete()

public void query()

public void update()

}

5.演示一下物件介面卡的實現

class program

}

1.優點:

可以在不修改原有**的基礎上來復用現有類,很好地符合 「開閉原則」

可以重新定義(被適配的類)的部分行為.

僅僅引入乙個物件,並不需要額外的字段來引用redishelper例項(這個即是優點也是缺點)

2.缺點:

採用了 「多繼承」的實現方式,帶來了不良的高耦合。

1.優點:可以在不修改原有**的基礎上來復用現有類,很好地符合 「開閉原則」,採用 「物件組合」的方式,更符合松耦合,以相容多個不同的物件

設計模式(6) 介面卡模式

將乙個類的介面轉換成客戶希望的另乙個介面。介面卡模式讓那些介面不相容的類可以一起工作。物件介面卡 一繼承一組合 類介面卡 多繼承 不推薦使用 在軟體構建過程中,由於應用環境的變化,常常需要把一些現存的物件放在新的環境中使用,但是新的環境要求的介面是現存物件所滿足不了的。抽象目標類 target 新的...

java設計模式6 介面卡模式

介面卡 就是講以有的類通過介面卡轉化為我們需要的型別。介面卡起到了中間作用 如圖所示,介面卡的作用就像是充電器一樣 手機充電需要的是5v電壓,但是家裡插座出來的電壓220v 手機介面卡就是將其轉換為5v的過程 public class mobile 提供5v電壓的乙個介面 author zhy pu...

6 設計模式之介面卡模式

將一類介面轉換成另乙個類介面,使得原本具有相關性但不相容的兩個介面,可以可以在一起工作。生活中常見的介面卡就是手機充電器了 家裡的220v電源插座可以視作乙個介面,同時usb資料線也可視作乙個介面,這兩個介面具有相關性,但他們不相容,因為usb資料線需要乙個5v的輸入,但插座是220v的,因此我們就...