2

オブジェクト指向プログラミング パターンに関する本を読みました。これは、オブジェクトの静的ファクトリ メソッドを呼び出すことができる Factory パターンを記述しており、オブジェクトは期待される型の新しいオブジェクトを返しますが、適切にサブクラス化されます。

私の質問は、クラスのコンストラクターによってこの機能を提供できますか? もしそうなら、どのように?なぜではないのですか?サブクラス PoliceOfficer、NativeAmerican、Cowboy、Biker、ConstructionWorker、および Sailor を持つ VillagePerson というクラスがあるとします。コンストラクターは、人物のテキスト文字列の説明を受け取り、それを解析して、必要な人物の特定のタイプを返します。これは静的ファクトリ メソッドでのみ可能ですか?

4

2 に答える 2

3

いいえ。通常、コンストラクターは、作成中のオブジェクトを初期化するために言語によって自動的に呼び出される関数です。これは、それ自体、ファクトリの「オブジェクトを作成するために私に電話してください」機能をコンストラクターで提供できないことを意味します。

また、コンストラクターは通常new ClassName(args)、ほとんどの言語で定義されているような式から呼び出され、ClassNameから継承するクラスではなく、 のインスタンスを作成しますClassNamenewそのため、またはコンストラクターを使用して、任意の型のインスタンスを作成することはできません。

一方、私は「ほとんどの言語で」と言いました。JavaScript のように、コンストラクターから必要なものを何でも返すことができるものもあれば、Objective Caml のように、コンストラクターをファクトリ関数として扱うものもあります。

于 2010-07-16T14:50:00.370 に答える
1

これはStevenSuditのコメントの言い換えです

:の上にProxyクラスを作成します。VillagePerson

  • プロキシはと同じインターフェースを実装しVillagePersonますが、そこから実装コードを継承しません。
  • プロキシには_vpImpl、サブクラス化されたVillagePersonオブジェクトへの参照が含まれています。
  • プロキシでメソッドが呼び出されると、プロキシはその呼び出しを_vpImplオブジェクトに渡すだけです。

サブクラスを作成するためVillagePersonに、プロキシのコンストラクターはサブクラスの特定のコンストラクターを呼び出して、それをに格納できます_vpImpl

于 2010-07-16T15:18:30.487 に答える