0

簡単な要約: クラスの特定のインスタンス化を事前に定義したい場合、サブクラスまたはファクトリを作成する方が良いですか?

問題のコンテキスト

多数のプロパティを持つビュー ヘルパー クラス MyWebserviceUrl があります。その目的は、URL を生成することです。

このクラスのインスタンスを事前に構成できるようにしたいので、 の同じファミリに対して多くの を実行する必要がsetThis()ありませsetThat()ん。このタイプに関連するデフォルト。MyWebserviceUrlaa

MyWebserviceUrlこのようにサブクラスでこれを解決できます

UrlFamFoo extends MyWebserviceUrl  {…}
UrlFamBar extends MyWebserviceUrl  {…}

MyWebserviceUrl「Foo」のようなパラメーターを指定すると、オブジェクトを構成できるファクトリーを作成することもできます。

私の質問:

  1. サブクラスのルートに行くべきですか、それとも工場のルートに行くべきですか?
  2. 工場に助言する場合、これは
    • 別のビュー ヘルパー、
    • 通常のファクトリ クラス、または
    • メソッドfactory($name)MyWebserviceUrl

補足:私は現在 Zend Framework で開発していますが、この質問はより一般的だと思います。


edit1 →<em>より具体的に言うと、一部のプロパティをデフォルトに設定し、残りをその場で設定する必要があるだけです。

4

2 に答える 2

2

サブクラス化は、私にとって正しい解決策のようには見えません。考えてみてください。あなたの例では、 aUrlFamFooMyWebserviceUrlプロパティが特定の値に設定されているだけです。オブジェクトを取り、MyWebserviceUrlそのプロパティを設定して、オブジェクトのように振る舞わせることができUrlFamFooます。明らかに、このサブクラスは不要です。

ファクトリ メソッドまたは単にコンストラクタを使用します。

于 2009-11-21T20:42:41.433 に答える
2

プロトタイプ パターンを使用しますか? 思い通りに作成したら、次に同じものが必要になったときに複製を作成します。これは、すべてのプロパティを同じままにしたい場合に便利です。

一部のプロパティをデフォルトに設定し、残りをオンザフライで設定する必要がある場合は、サブクラス化ではなくファクトリ メソッドを使用します。本当にサブクラスが必要な場合は、ファクトリ クラスが適している可能性があります。

于 2009-11-21T20:06:59.213 に答える