包装库特定对象的最佳设计模式?

时间:2012-02-10 18:41:13

标签: java design-patterns

我是设计模式的新手。当开发人员使用库(在我的情况下是一个库来筛选HTML)并且不希望客户端/调用类被“卡住”到该库时,最好的模式是什么?

例如,如果我在名为HtmlPage的库中使用类,而客户端使用'getPage()' - 我不想从库中返回HtmlPage对象,而是某种HtmlPage的包装器如果我决定更换库,我可以换掉。它就这么简单吗?或者我错过了什么?我是否必须为库中的每个对象执行此操作?

public class HtmlPageWrapper {
    private HtmlPage htmlPage;

    public HtmlPageWrapper(HtmlPage) {}

    public getTableOnPage() {
        return htmlPage.getTableOnPage;
    }

    // etc...

}

谢谢!

3 个答案:

答案 0 :(得分:2)

我认为你对Adapter Pattern感兴趣。这将使您通过创建一个公开应用程序将使用的抽象操作的Adapter类,使这些第三方类远离您的代码。

您不一定要为库中的每个对象执行此操作,只需确保包装需要与之交互的主对象。

答案 1 :(得分:0)

我只是扩展它并覆盖我想要更改/添加的那些,然后我可以重用我仍然喜欢的那些,

public class HtmlPageWrapper extends HtmlPage {

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

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

    // etc...

}

答案 2 :(得分:0)

如果你想隐藏单个界面后面的库,你也可以尝试使用Façade模式,然后可以为不同的库提供不同的实现。

为子系统中的一组接口提供统一接口。 Façade定义了一个更高级别的接口,使子系统更易于使用。

参考:Façade Pattern