C#の中の抽象的な工場のモードはどんな概念ですかを簡単に理解します!

11448 ワード

抽象ファクトリモードは、クライアントが特定のタイプを指定する必要がなく、複数のプロダクトファミリー内のオブジェクトを作成するように、クライアントにインタフェースを提供します.本文は依然として従来のファーストフード店に続く例を取った.現在、ファーストフード店は常に良好で、次第に発展し、異なる地方の人の食習慣に適応するために、2大シリーズ(製品族に相当)のファーストフード、北方シリーズと南方シリーズを創設した.各シリーズはそれぞれシェフのスプーンで作られています.抽象工場モデルは新しい製品ファミリーに対して開閉原則を支持するが,新しい製品に対して開閉原則を支持しない.たとえば、米国シリーズのファーストフード(製品ファミリーを追加することに相当)を追加するなど、新しい製品ファミリーを追加すると、各製品インタフェースから対応する米国シリーズの製品を継承すれば、既存のコードを変更する必要はありません.しかし、新しい製品を追加すると、例えば「マントー」という製品を追加すると、開閉原則はサポートされません.シェフインタフェースにおいて、「マントー」に戻る方法を追加するため、既存のインタフェースを修正し、上層インタフェースを修正し、このインタフェースを継承する具体的なクラスも変更されます.
抽象ファクトリモードを使用する条件:1つのシステムは、製品がどのように作成され、組み合わせられ、表現されるかの詳細に依存してはならない.2複数の製品ファミリーがあり、システムはそのうちの1つのファミリーの製品3が同じ製品ファミリーに属する製品のみを消費して一緒に使用される.4システムは製品のライブラリを提供し、すべての製品は同じインタフェースで実現されます.
次のC#実装を見てください.
    /// <summary> 

    ///          

    /// </summary> 

    class AbstractFactory

    {

        //          

        public interface Chef

        {

            //            

            //       

            Noodle MakeNoodle();

            //      

            Rice MakeRice();

            //       

            Bread MakeBread();

        }



        //

        class NorthChef : Chef

        {

            public Noodle MakeNoodle()

            {

                Console.WriteLine("
...
"); Noodle noodle = new NorthNoodle(); return noodle; } public Rice MakeRice() { Console.WriteLine("
...
"); Rice rice = new NorthRice(); return rice; } public Bread MakeBread() { Console.WriteLine("
..
"); Bread bread = new NorthBread(); return bread; } } // class SouthChef : Chef { public Noodle MakeNoodle() { Console.WriteLine("
。。。
"); Noodle noodle = new SouthNoodle(); return noodle; } public Rice MakeRice() { Console.WriteLine("
。。。
"); Rice rice = new SouthRice(); return rice; } public Bread MakeBread() { Console.WriteLine("
。。。
"); Bread bread = new SouthBread(); return bread; } } // public interface Noodle { // } class NorthNoodle : Noodle { public NorthNoodle() { Console.WriteLine("
"); } } class SouthNoodle : Noodle { public SouthNoodle() { Console.WriteLine("
"); } } // public interface Rice { // } class NorthRice : Rice { public NorthRice() { Console.WriteLine("
,
"); } } class SouthRice : Rice { public SouthRice() { Console.WriteLine("
"); } } // public interface Bread { // } class NorthBread : Bread { public NorthBread() { Console.WriteLine("
"); } } class SouthBread : Bread { public SouthBread() { Console.WriteLine("
"); } } }

アプリケーションの実装:
       /// <summary> 

        ////// </summary> 

        [STAThread] 

        static void Main(string[] args) 

        { 

            //      ,            ,        

            //

            Chef northChef=new NorthChef(); 

            northChef.MakeNoodle(); 

            northChef.MakeRice(); 

            northChef.MakeBread(); 

            Chef southChef=new SouthChef(); 

            southChef.MakeBread(); 

            southChef.MakeNoodle(); 

            southChef.MakeRice(); 

            Console.ReadLine(); 

        } 

実はこのまま!抽象工場は実体工場を生み出し、実体工場は実体製品を生産し、実体製品は抽象製品に属する.最終的にお客様に直接向いているのは抽象工場と抽象製品です.