1

我需要在 Java 中实现具有多重接口继承的外观设计模式,或者是使用桥设计模式的正确外观。我知道这是可能的,因为我把它看作是一个系统的一部分,但我不太记得它的实现。
到目前为止,这是我的实现:

public interface IOne {
public void methodOneIOne();
public void methodTwoIOne();
}

及其实现:

public class One implements IOne {
@Override
public void methodOneIOne() {
    System.out.println("methodOneIOne()");
}
@Override
public void methodTwoIOne() {
    System.out.println("methodTwoIOne()");
}  }


public interface ITwo {
public void methodOneITwo();
public void methodTwoITwo();
}
public class Two implements ITwo {
@Override
public void methodOneITwo() {
    System.out.println("methodOneITwo()");
}
@Override
public void methodTwoITwo() {
    System.out.println("methodTwoITwo()");
}}

和门面:

public interface IFacade extends IOne, ITwo {}

所以,从这里我不知道去哪里。如果我创建一个实现 IFacade 的类,那么它将需要实现所有方法,而这不是我想要的。

4

2 回答 2

8

如果我创建实现 IFacade 的类,那么 if 将需要实现所有方法,这不是我想要的。

为什么不?你想让 Facade 做什么?

所写的 Facade 实现必须实现所有方法,但这并不意味着重复您为 One 和 Two 编写的所有代码。只需使用组合:

public class Facade implements IFacade
{
    private IOne one;
    private ITwo two;

    public Facade(IOne one, ITwo two)
    {
        this.one = one; 
        this.two = two;    
    }

    @Override
    public void methodOneIOne() 
    {
        this.one.methodOneInOne(); 
    }

    // You see the point, I hope.

}

这种设计还有一个额外的好处,就是允许您随意更改 Facade 的实现:只需替换每个接口的不同实现即可。这些可以是动态生成的代理或您可以想象的任何其他东西。这就是界面设计的美妙之处。

于 2011-04-10T16:38:13.450 回答
1

你实际上想用你的外观类做什么?如果您只是尝试通过大多数方法,可能会修改一些方法,那么动态代理可能就是您想要的。

否则你实际上必须实现 的所有方法IFacade,因为 Java 不允许你使用多重继承,所以你不能同时扩展OneTwo

于 2011-04-10T16:37:20.783 回答