1

ふざけて、このアイデアを思いついたのですが、これはジェネリック ファクトリ メソッド パターンの適切な実装ですか?

工場コード:

public static class Factory
{
    public static T Create<T>() where T : new()
    {
        return new T();
    }
}

Factory を別の場所に呼び出す:

 class Program
    {
        static void Main(string[] args)
        {
            var obj = Factory.Create<Person>();
            obj.Name = "Mark";
            Console.WriteLine(obj.Name);

            var obj2 = Factory.Create<Animal>();
            obj2.AnimalType= "Dog";
            Console.WriteLine(obj2.AnimalType);

            dynamic obj3 = Factory.Create<ExpandoObject>();
            obj3.Age= 20;

            Console.WriteLine(obj3.Age);

            Console.ReadKey();
        }
    }

つまり、期待どおりに機能しています...しかし、ここで何か問題はありますか? 私はしない原因...

ファクトリを使用してオブジェクトをインスタンス化することを計画しており、これらは良さそうなので、アドバイスをいただければ幸いです。

前もって感謝します:D

編集: 以前の名前は GetInstance であり、紛らわしかったため、質問を明確にするためにファクトリ メソッドの名前を変更しました。

4

2 に答える 2

2

あなたのコードは技術的には正しいですが、IMO は役に立ちません。この Factory を使用しても何のメリットもありません。必要な新しいインスタンスごとに new使用する方がはるかに簡単です。だから、これは問題です。

実際、それは工場を持つ理由をほとんど打ち負かしています。抽象化を返さず、高価なオブジェクトの構築には適していません。また、コードは Factory に結合されます。

DI コンテナー、autofac は非常に優れており、ほぼファクトリーであり、登録されている任意の型のインスタンス化を処理する方法を知っています。また、依存関係として必要なインスタンスを注入するために使用することもできます。

結論として、単純なケースにはnewキーワードを使用し、依存関係のあるオブジェクトには DI コンテナーを使用することをお勧めします。あなたが書いた Factory クラスとその使用法は、実際には悪いコードのように見えるので、実際のアプリでは使用しないでください。

于 2013-04-17T07:13:08.290 に答える
0

この例は問題なく動作しますが、これが本当に必要な状況はほとんど想像できません。私の頭に浮かんだ唯一の使用法は、オブジェクト作成アクションごとにログ記録などを行う必要がある場合です。それ以外の場合は、ターゲット型コンストラクターを呼び出すだけです。通常、ファクトリを使用して、共通のインターフェイスを実装するさまざまなオブジェクトを作成します。したがって、ファクトリのクライアントは、使用されているインターフェイスの正確な実装についての知識がなく、結合の少ないソリューションにつながります。基本的に、ファクトリはインターフェイスの具体的な実現について知っていますが、ファクトリの消費者は知りません。それが主なアイデアです。

于 2013-04-17T07:16:19.430 に答える