如何在一个类中使用一个接口的更多实现?

时间:2019-05-19 07:23:37

标签: java design-patterns

我想就以下问题寻求您的帮助。

有一个具有更多实现的接口:

public interface MyInterface {
    void method();
}
public class MyInterfaceA implements MyInterface
public class MyInterfaceB implements MyInterface

还有一个类,以不同的方法使用这些接口的实现:

public class MyClass {
    public void firstMethod() {
        new MyInterfaceA().method();
    }
    public void secondMethod() {
        new MyInterfaceB().method();
    }
}

我的问题是我不想在类的方法中创建新的特定实例,所以我想以某种方式隐藏使用的实现。

您知道一个不错的解决方案吗?有什么我可以使用的设计模式?我该如何隐藏具体的实现,否则我不能?

谢谢您的回答!

2 个答案:

答案 0 :(得分:2)

例如,您可以在html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } 的构造函数中接收实现并进一步使用它。它可以帮助您隐藏特定的实现。

MyClass

答案 1 :(得分:1)

您可以应用Factory模式:

subscribe

class Factory { public MyInterface a() { return new MyInterfaceA(); } public MyInterface b() { return new MyInterfaceB(); } } public class MyClass { private Factory factory; public MyClass(Factory factory) { this.factory = factory; } public void firstMethod() { factory.a().method(); } public void secondMethod() { factory.b().method(); } } 类中,您可以缓存必要时创建的对象。