0

C# でオブジェクト ファクトリを作成したいと考えています。このオブジェクト ファクトリを介してのみオブジェクトを作成したいのですが、これを実現するにはどうすればよいですか? オブジェクトを作成および初期化するパブリック メソッドを持つサティック クラスのような単純なオブジェクト ファクトリを作成する方法を知っています。しかし、人々がオブジェクト ファクトリを介してのみオブジェクト インスタンスを作成できるようにする必要があります。何かアイデアはありますか?

PS私はリフレクションを巻き込むのは好きではありません。単純なOOPアプローチを使用してください。

4

2 に答える 2

1

Widget というパブリック インターフェイスを作成します。次に、newWidget() というメソッドを持つ WidgetFactory というクラスを作成します。ウィジェットを返します。WidgetFactory "WidgetImpl" 内に、Widget インターフェースを実装する追加のクラスを定義します。これは、WidgetFactory の外ではアクセスできません。WidgetImpl の新しいインスタンスを作成して返すことにより、newWidget() を実装します。

つまり、インターフェイスをクラス スコープの実装と組み合わせて使用​​して、実装を非表示にします。

于 2010-08-31T00:28:30.130 に答える
1

利用可能な唯一の方法がファクトリを使用するように、ファクトリに作成させたいクラスの実装をどうにかして非表示にする必要があります。そうしないと、人々がクラスのインスタンスを直接作成するのを止めることはできません。クラス自体を非表示にできない場合は、クラスのコンストラクターを非表示にする別の手法があります。ほとんどの場合、これは (Java で) プライベートおよびパッケージのプライベート クラスとメソッドを使用して行われます。

しかし、これを考慮してください。開発者がクラスへのアクセスを必要とすることは珍しくありません。良い例は単体テストかもしれません。

したがって、完全に非表示にできない場合は、開発者がそれを直接インスタンス化するのを「思いとどまらせる」方法を検討してください。

于 2010-08-30T06:23:08.163 に答える