クラスを拡張せずに動的ポリモーフィズムを実現する方法をインタビューで尋ねられました。これはどのように行うことができますか?
3 に答える
カプセル化を利用するデコレーター デザイン パターンは、あなたが探しているものです。
継承によるポリモーフィズム:
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
簡単な解決策は、基本クラスを拡張するのではなく、インターフェイスを実装するクラスを作成することです。
別の解決策は、動的プロキシを作成することです...これは本質的に、クラスを明示的に記述せずにインターフェースを実装する賢い方法です。詳細については、Proxy
javadocを参照してください。
はい、これらはデコレータ パターンの例です (またはその可能性があります)。ただし、ここで重要なのは設計パターンではなく実装テクニックです。
私の経験によると、ほとんどの就職面接では、質問はあまりにも手の込んだ答えを求めるものではなく、ほとんどの場合、トリッキーな質問です。そのため、クラスを拡張せずに具体的にポリモーフィズムについて尋ねられた場合、私は次のように言うでしょう:
はい、クラスを拡張するのではなく、インターフェイスを実装することで動的ポリモーフィズムを実現できます
さらにオプションを要求する場合は、プロキシ、パターン、またはその他のものを表示しても問題ありません。
それが役に立てば幸い!