2016-12-15 40 views
1

繼續從問題How do the Proxy, Decorator, Adapter, and Bridge Patterns differ?中,您將如何描述以下需要多次實施的模式?什麼是包裝訪問靜態方法/變量的模式名稱?

這種情況是,我從第三方類引用靜態方法或變量,但我想隱藏它在一個接口後面,以便我可以嘲笑它進行測試。

例如,在Java中,commons-lang庫有一個常量爲IS_OS_WINDOWS等的SystemUtils類。我想運行獨立於底層操作系統並模仿各種操作系統的測試,因此我將對常量的訪問包裝如下:

interface ISystemUtils { 
    boolean isOsWindows(); 
} 

class SystemUtilsImpl implements ISystemUtils { 
    @Override 
    public boolean isOsWindows() { 
     return SystemUtils.IS_OS_WINDOWS; 
    } 
} 

這是代理服務器,通用「包裝器」還是其他?

回答

4

這被稱爲Facade

阿立面是提供了一種簡化的接口到較大 體的代碼,諸如一個類庫的對象。一個門面可以:

  • 使軟件庫更易於使用,理解和測試,因爲 門面有方便的常見任務;
  • 使圖書館的可讀性,出於同樣的原因
  • 減少對庫的內部工作之外的代碼的相關性,因爲大多數代碼使用的正面,從而使更多的靈活性在開發該系統
  • 包裹難溶使用一個精心設計的API設計了一系列API。
+0

感謝您的快速答案@adriaan。 Facade「感覺」是正確的,儘管我的理解是它通常涉及覆蓋_multiple_基礎類的元素。然而,我的例子可以說是涵蓋了大多數上述要點,特別是第一個。 – Richard

+1

@Gendarme修復了Facade鏈接tnx的佈局 –

1

Facade模式是一個很好的答案,但我不同意,它通常(在我的經驗至少)暴露了許多不同的操作/班。有了這些說法,其他一些模式也可以達到同樣的目的 - 代理可能是我的第一選擇,但Adapter或Mediator也可能是一個很好的選擇。您可能會遇到的另一個術語是「delegate」。