2010-07-12 88 views
6

我無法決定哪種模式最適合以下問題。使用的最佳設計模式:適配器或外觀

我有一個客戶端系統將與一個單獨的子系統交互。子系統相當複雜,所以我需要兩者之間的接口來簡化客戶端系統。這聽起來像是適合Facade模式的完美選擇,但我認爲Adapter模式適合我的問題。

如果中間的接口通過簡單的API調用調用子系統上的單個任務,它會有所作爲嗎?

回答

9

從你的描述來看,它更接近於Facade的公認定義,但我認爲它比其他任何語義辯論更多。通常情況下,外觀更加減少了與整個子系統接口的複雜性,而適配器更適合調整現有的接口或調用您的特定需求(例如,基本功能在那裏,但返回類型不是您想要的,等等)。

6

這顯然是一個門面模式的情況下,你的目標是簡化而不是實際的適應。

外牆定義:

提供一個統一的接口界面子系統中的一組 。外牆 定義了一個更高級別的界面, 使子系統更易於使用。

適配器定義:

將一個類的接口轉換成 另一個接口的客戶期望。 適配器讓類一起工作 否則因爲 不兼容的接口。

定義擡離:http://dofactory.com/Patterns/Patterns.aspx

0

門面和適配器之間的差異主要是意圖。

如果你想要做的是簡化界面,那麼你正在尋找一個Facade。如果你想調整接口,以便它可以用作其他東西,那麼它是一個適配器。

但是真的,你怎麼稱呼它呢?我的經驗法則是如果你正在實現一個現有的接口,你可能正在使用Adapter接口。如果您正在創建一個新的簡化界面,它將成爲一個Facade。

5

適配器模式用於當您希望將現有類的接口適配到客戶端期望使用的另一個接口時。它通常只涉及從一個接口的方法到另一個的相應方法的委託或翻譯。

外觀用於當您想通過公開更簡單的客戶端可以使用的一組API來簡化複雜系統。它涉及將複雜的API調用模式轉換爲單個API調用。

你的情況聽起來更像是你需要一個立面而不是一個適配器。只實現適配器模式不會給你API簡化的好處。最後,你稱之爲無關緊要。而這些模式並不是唯一的。你可以混合兩種方式,給你最大的好處。

-3

門面處理接口,而不是實現。它的目的是隱藏內部簡單的界面,看起來很簡單。

0

Facade圖案(,提供了一個簡化的界面的代碼較大體的對象)適合爲您的使用情況。

清單使用門面:(從鏈接維基百科文章)

  1. 一個簡單的界面來訪問一個複雜的系統要求。
  2. 子系統的抽象和實現緊密耦合。
  3. 需要一個分層軟件的每個級別的入口點。
  4. 系統非常複雜或難以理解。

相關SE問題有關Facade的更多詳細信息。即使

What is Facade Design Pattern?

門面適配器是結構模式,其目的是不同的(samitgaur答案很好解釋的意圖一部分)。

由於您沒有將一個接口轉換爲其他接口,因此Adapter無法達到您的目的。

相關SE問題:

What is the difference between the Facade and Adapter Pattern?