38

クラスを拡張せずに動的ポリモーフィズムを実現する方法をインタビューで尋ねられました。これはどのように行うことができますか?

4

3 に答える 3

40

カプセル化を利用するデコレーター デザイン パターンは、あなたが探しているものです。

継承によるポリモーフィズム:

class Cat {
  void meow() {
    // meow...
  }
}
class Lion extends Cat {
}

カプセル化によるポリモーフィズム (Decorator パターン):

interface Cat {
  void meow();      
}
class Lion implements Cat {
  private Cat cat;
  void meow() {
    this.cat.meow();
  }
}

ps。デコレータの詳細: http://www.yegor256.com/2015/02/26/composable-decorators.html

于 2012-09-10T07:27:00.363 に答える
30

簡単な解決策は、基本クラスを拡張するのではなく、インターフェイスを実装するクラスを作成することです。

別の解決策は、動的プロキシを作成することです...これは本質的に、クラスを明示的に記述せずにインターフェースを実装する賢い方法です。詳細については、Proxyjavadocを参照してください。

はい、これらはデコレータ パターンの例です (またはその可能性があります)。ただし、ここで重要なのは設計パターンではなく実装テクニックです。

于 2012-09-10T07:30:09.163 に答える
3

私の経験によると、ほとんどの就職面接では、質問はあまりにも手の込んだ答えを求めるものではなく、ほとんどの場合、トリッキーな質問です。そのため、クラスを拡張せずに具体的にポリモーフィズムについて尋ねられた場合、私は次のように言うでしょう:

はい、クラスを拡張するのではなく、インターフェイスを実装することで動的ポリモーフィズムを実現できます

さらにオプションを要求する場合は、プロキシ、パターン、またはその他のものを表示しても問題ありません。

それが役に立てば幸い!

于 2012-09-10T15:51:59.743 に答える