1

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 を実装するクラスを作成すると、すべてのメソッドを実装する必要があり、これは私が望むものではありません。

4

2 に答える 2

8

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 の実装を自由に変更できるという追加の利点があります。各インターフェイスの異なる実装を置き換えるだけです。これらは、動的に生成されたプロキシまたは思いつく他のものにすることができます。それがインターフェイスを設計することの美しさです。

于 2011-04-10T16:38:13.450 に答える
1

ファサードクラスで実際に何をしようとしていますか? ほとんどのメソッドを通過させようとしているだけで、おそらくいくつかを変更している場合は、動的プロキシが必要になる可能性があります。

そうしないと、実際には のすべてのメソッドを実装するIFacade必要があります。Java では多重継承を使用できないため、 と の両方Oneを拡張することはできませんTwo

于 2011-04-10T16:37:20.783 に答える