多个接口以Java扩展

时间:2011-04-10 16:31:58

标签: java design-patterns facade

我需要在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的类,那么它将需要实现所有方法,这不是我想要的。

2 个答案:

答案 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不允许您使用多重继承,因此您无法扩展OneTwo。< / p>