2012-02-10 70 views
0

我對設計模式相當陌生。當開發人員使用庫(在我的情況下是一個庫來屏蔽HTML)並且不希望客戶機/調用類被「卡住」該庫時,什麼是最好的模式?包裝庫特定對象的最佳設計模式?

例如,如果我在名爲HtmlPage的庫中使用了一個類,並且客戶端顯示'getPage()' - 我不想從庫中返回HtmlPage對象,而是使用某種HtmlPage的包裝如果我決定改變圖書館,我可以換掉。這是否簡單?或者我錯過了什麼?我需要爲圖書館中的每個物體做這件事嗎?

public class HtmlPageWrapper { 
    private HtmlPage htmlPage; 

    public HtmlPageWrapper(HtmlPage) {} 

    public getTableOnPage() { 
     return htmlPage.getTableOnPage; 
    } 

    // etc... 

} 

謝謝!

回答

2

我想你對Adapter Pattern感興趣。這可以讓你通過創建一個Adapter類來讓這些第三方類遠離你的代碼,從而暴露你的應用程序將使用的抽象操作。

您不必爲庫中的每個對象都這樣做,只要確保包裝需要與之交互的主對象。

+0

謝謝,我認爲可能是使用的人,但我認爲這是唯一的橋接不兼容一起上課......也許我只是它得太多。 – acvcu 2012-02-10 18:45:31

+0

這是最常見的用例,但您也可以在您的場景中使用它,因爲將來如果您引入不同的html screenscraping庫,那麼該庫的接口可能與當前庫不兼容,因此將與您的代碼不兼容。 – ggreiner 2012-02-10 18:47:55

0

我只想擴展它,並覆蓋我想改變/添加,然後我可以重用那些我還是喜歡的,

public class HtmlPageWrapper extends HtmlPage { 

    public HtmlPageWrapper(HtmlPage p) { 
     super(p); 
    } 

    @Override 
    public getTableOnPage() { 
     return super.getTableOnPage(); 
    } 

    // etc... 

} 
0

你也可以,如果你想隱藏的嘗試Facade模式一個接口後面的庫,它可以對不同的庫有不同的實現。

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

編號:Façade Pattern