9

工場のパターンとは逆のパターンがあるのではないかと思っていました。たとえば、特定のオブジェクトを削除する必要がある場合、ファクトリ オブジェクトで実行された構成を元に戻すために、追加の作業を行う必要があります。

ファクトリ パターンは厳密な作成パターンであるため、たとえば Delete メソッドを使用してファクトリ オブジェクトを拡張することは間違っているようです。

更新: 私がファクトリを使用している理由は、実行する必要がある構成によって、オブジェクトに適合しないいくつかの依存関係が導入されるためです。この構成解除をコンストラクターに入れると、同じ問題が発生します。

4

3 に答える 3

4

リポジトリを使用して永続化されたオブジェクトを削除したり、dispose メソッドを使用してメモリ内のみのオブジェクトをクリーンアップしたりできます。

于 2009-09-15T07:55:18.810 に答える
3

これが factory の正しい使い方です。Factory は、オブジェクトを作成する方法であるだけでなく、「これらの種類のオブジェクトには特別な初期化が必要です」と言う方法でもあります。あなたの問題では、廃棄などのイベントを工場に通知するのが最善の解決策だと思います。したがって、オブジェクトの作成は次のような方法で行われます。作成、新しく作成されたオブジェクトのイベントにファクトリをサブスクライブします。オブジェクトが削除されるたびに、それをファクトリに通知し、必要なアクションを実行します。

これをファクトリに入れたくない場合は、DeathKeeper などの他のオブジェクトに委譲することができます ;-)。したがって、コードは次のようになります。

//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);

return obj;

オブジェクトを削除する必要があるたびに、オブジェクトはデスキーパーに通知し、すべての破棄ロジックを作成します。ところで、それがどのように機能するのかはわかりませんが、IDisposable インターフェイスを使用して、オブジェクトが保持するリソースを破棄するためのカスタム ロジックを実行できます。決定は、プロジェクトに何があるかに依存し、あなた次第です。

于 2009-09-16T04:01:35.963 に答える
2

工場と連携して機能する「リサイクル施設」パターンを使用します。

  • リサイクル可能なクラスごとに「クリーンな」メソッドを用意する
  • オブジェクトインスタンスごとに「一意のID」があります

オブジェクトが寿命に達するたびに、そのオブジェクトを「リサイクル施設」(RF)に送信します。

  • RFは、いくつかのポリシーに従ってオブジェクトを格納します(たとえば、クラスYのXインスタンスのみを保持します)
  • クラスYのインスタンスが必要な場合、ファクトリはRFを取得したかどうかをRFに「要求」します。
    • RFに便利なものがある場合、RFはインスタンスで「clean()」メソッドを呼び出し、それをファクトリに返します

...などなど。

お役に立てれば。

于 2009-09-19T18:44:00.740 に答える