我需要在Java中实现具有多个接口继承的Facade设计模式,或者使用Bridge设计模式来实现正确的Facade。我知道这是可能的,因为我把它看作是一个系统的一部分,但我不记得实施得很好 这是我到目前为止的实现:
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的类,那么它将需要实现所有方法,这不是我想要的。
答案 0 :(得分:9)
如果我创建实现的类 IFacade,然后如果需要 实现所有方法,这个 不是我想要的。
为什么不呢?你希望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的实现:只需替换每个接口的不同实现。这些可以是动态生成的代理或您可以想到的任何其他内容。这就是设计界面的美妙之处。
答案 1 :(得分:1)
你真正试图用门面课做什么?如果你只是试图通过大多数方法,可能修改一些方法,那么dynamic proxy可能就是你想要的。
否则您实际上必须实现IFacade
的所有方法,因为Java不允许您使用多重继承,因此您无法扩展One
和Two
。< / p>