3

オブジェクト指向の設計に関する質問があります。

Factory パターンを使用して、Factory に渡すパラメーターに適したクラスのオブジェクトを作成しています。ただし、オブジェクトの作成後にのみ取得できる属性がいくつかあります。これらの属性を使用して、オブジェクトのタイプをさらにサブクラス化または「特殊化」します。

追加の入力パラメーターを持つオブジェクトのカスタム ロジックを使用するには、ポリモーフィズムのサブクラスが必要です。

「実行時のオブジェクトクラスの再決定」という設計パターンだと思います。どうすれば実装できますか? ああ、それは悪い習慣かもしれませんか?

4

2 に答える 2

2

実行時にオブジェクト タイプを変更することはできません。基本クラスのインスタンスがある場合、それは基本クラス型のままです。ただし、実行時に新しいオブジェクトを作成できます。継承の代わりに構成を使用します。

つまり、基本クラスから継承する代わりに、別のオブジェクト階層を作成します。基本オブジェクトの作成後に変更される新しいクラス (基本クラスから継承されていない) コードに抽出します。何かの策略かもしれません。次に、実行時に基本オブジェクトに戦略のさまざまな実装を提供します (つまり、基本クラスのインスタンスを「特殊化」します)。

于 2012-12-09T18:32:38.417 に答える
0

インスタンス化されたオブジェクトのタイプを変更することはできませんが、2 つの回避策が考えられます:
1. 初期の Factory から別の Factory をインスタンス化します。
2. ExpandoObject で Ruby の「メソッド欠落」の概念を利用する。あなたの場合に適しているかどうかはわかりません。

于 2012-12-09T18:44:55.337 に答える