3.ファクトリメソッドモード(作成モード)

11472 ワード

1.定義:
オブジェクトを作成するためのインタフェースを定義し、サブクラスにどのクラスをインスタンス化するかを決定させます.Factory Methodは、クラスのインスタンス化をサブクラスに遅延させる.
2.実装コードは以下の通りである:
 
 /// <summary>

    ///     

    /// </summary>

    public abstract class Factory

    {

        public abstract Compute GetCompute();

    }



    public class AddFactory : Factory

    {

        public override Compute GetCompute()

        {

            return new AddCompute();

        }

    }

    public class JianFaFactory : Factory

    {

        public override Compute GetCompute()

        {

            return new SubCompute();

        }

    }

    public class ChengFaFactory : Factory

    {

        public override Compute GetCompute()

        {

            return new ChengFaCompute();

        }

    }

    public class ChuFaFactory : Factory

    {

        public override Compute GetCompute()

        {

            return new ChuFaCompute();

        }

    }





    /// <summary>

    ///    

    /// </summary>

    public abstract class Compute

    {

        protected int number1;



        public int Number1

        {

            get { return number1; }

            set { number1 = value; }

        }

        protected int number2;



        public int Number2

        {

            get { return number2; }

            set { number2 = value; }

        }



        public abstract int GetResult();

        

    }



    /// <summary>

    ///   

    /// </summary>

    public class AddCompute : Compute

    {

        public override int GetResult()

        {

            return number1 + number2;

        } 

    }

    /// <summary>

    ///   

    /// </summary>

    public class SubCompute : Compute

    {

        public override int GetResult()

        {

            return number1 - number2;

        }

    }

    /// <summary>

    ///   

    /// </summary>

    public class ChengFaCompute : Compute

    {

        public override int GetResult()

        {

            return number1 * number2;

        }

    }



    /// <summary>

    ///   

    /// </summary>

    public class ChuFaCompute : Compute

    {

        public override int GetResult()

        {

            return number1 / number2;

        }

    }
 
 static void Main(string[] args)

        {

            int number1 = 1;

            int number2 = 2;

          

            Factory factory = null;

            string operate = "+";

            switch (operate)

            {

                case "+":

                   factory = new AddFactory();

                    break;

                case "-":

                     factory = new JianFaFactory();

                    break;

                case "*":

                     factory = new ChengFaFactory();

                    break;

                case "/":

                     factory = new ChuFaFactory();

                    break;

                default:

                    break;

            }

            Compute compute = factory.GetCompute();



            compute.Number1 = number1;

            compute.Number2 = number2;

            Console.WriteLine(compute.GetResult());

            Console.ReadKey();

        }

 
 
3.単純工場と違うところは
(1)単純ファクトリはswitchによって直接具体的な製品オブジェクトを作成し、ファクトリメソッドはswithによって具体的な製品オブジェクトを作成することを遅延し、まず相応のファクトリを作成し、遅延に具体的な製品オブジェクトを作成する
(2)単純ファクトリは1つのファクトリしか作成できず,ファクトリメソッドは複数のファクトリを作成できる.
 
4.工場方法のメリット:
(1)ファクトリメソッドで1つのクラスの内部にオブジェクトを作成することは、通常、直接オブジェクトを作成するよりも柔軟である.
(2)Factory Methodモードは,オブジェクト向けの手法により,作成する特定のオブジェクトの作成作業をサブクラスに遅延させ,このような緊密な結合関係をより良く解決するための拡張戦略を提供する.