介面卡(UML 示例情況)

為了使介面卡模式的使用和可能更容易理解的情況,這裡給出了一個小而簡單且非常具體的例子。這裡沒有程式碼,只有 UML 以及示例情況及其問題的描述。不可否認,UML 內容就像 Java 一樣編寫。 (好吧,提示文字說好的例子主要是程式碼,我認為設計模式足夠抽象,也可以用不同的方式介紹。)

通常,介面卡模式是適用於具有不相容介面且無法直接重寫的情況的解決方案。

想象一下,你正在執行一個不錯的小披薩送貨服務。客戶可以在你的網站上線上訂購,並且你使用 Pizza 類小系統來代表你的比薩並計算賬單,稅務報告等。比薩餅的價格以一個整數表示,代表價格(以你選擇的貨幣計算)。

StackOverflow 文件

你的送貨服務很棒,但在某些時候你不能再自己處理越來越多的客戶了,但你仍然希望擴充套件。你決定將你的比薩新增到大型線上元交付服務的選單中。他們提供了很多不同的飯菜 - 不僅是比薩餅 - 所以他們的系統更多地使用了抽象,並且有一個介面 IMeal 代表著飯,以及代表錢的類 MoneyAmount

StackOverflow 文件

MoneyAmount 由兩個整數作為輸入組成,一個用於逗號之前的金額(或一些隨機貨幣),另一個用於逗號後 0 到 99 之間的分數;

StackOverflow 文件

由於你的 Pizza 的價格是一個整數,表示總價格為分數(> 99),因此與 IMeal 不相容。這就是介面卡模式發揮作用的地方:如果需要花費太多精力來更改自己的系統或建立一個新系統,並且必須實現不相容的介面,則可能需要應用介面卡模式。

應用模式有兩種方法:類介面卡和物件介面卡。

兩者都有一個共同點,即介面卡(PizzaAdapter)作為新介面和介面卡(本例中為 Pizza)之間的某種轉換器。介面卡實現新介面(IMeal),然後從 Pizza 繼承並將其自己的價格從一個整數轉換為兩個(類介面卡)

StackOverflow 文件

或者有一個 Pizza 型別的物件作為屬性並轉換它的值(物件介面卡)。

StackOverflow 文件

通過應用介面卡模式,你將在不相容的介面之間進行轉換