大話設計模式-簡單工程模式

前言:

簡單工廠模式是這23個模式裏的第一個模式,也是比較簡單和體現非常明確的一個模式。通過簡單工廠可以非常好的體驗出面向對象編程的好處,面向對象概念的重要性。也算是通過這個模式體驗設計模式的好處把!

目錄

概念:

需求:

實現:

業務邏輯:

     運算基類:

運算具體的派生類:

運算工廠: 

客戶端:

結果:


概念:

根據客戶端的選擇進行動態的實例化對象,也就是根據用戶的需求來實例化具體的對象。

需求:

實現一個有加減乘除的計算器,利用簡單工廠模式實現。

實現:

業務邏輯:

     運算基類:

 /// <summary>
    /// 計算類
    /// </summary>
    public class Operation
    {
        private double _numberA = 0;
        private double _numberB = 0;
        public double NumberA
        {
            get { return _numberA; }
            set { _numberA = value; }
        }//end NumberA
        public double NumberB
        {
            get { return _numberB; }
            set { _numberB = value; }
        }//end NumberB
        //計算方法--虛方法
        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }//end Pperaton
    

運算具體的派生類:

       

/// <summary>
    /// 加法運算,繼承運算類。
    /// </summary>
    class OpertionAdd : Operation
    {
        //重新父類的計算方法
        public override double GetResult()
        {
            double result = 0;//計算結果
            result = NumberA + NumberB;//具體運算
            return result;//返回結果
        }//end Getresult
    }//end OpertonAdd
    /// <summary>
    /// 減法
    /// </summary>
    class OpertiononSub : Operation
    {
        //重新父類的計算方法
        public override double GetResult()
        {
            double result = 0;//計算結果
            result = NumberA - NumberB;//具體運算
            return result;//返回結果
        }//end Getresult

    }//end OPertionsub
    /// <summary>
    /// 乘法
    /// </summary>
    class OpertionMul : Operation
    {
        //重新父類的計算方法
        public override double GetResult()
        {
            double result = 0;//計算結果
            result = NumberA * NumberB;//具體運算
            return result;//返回結果
        }//end Getresult
    }//end OpertionMul
    /// <summary>
    /// 除法
    /// </summary>
    class OpertionDiv : Operation
    {
        //重新父類的計算方法
        public override double GetResult()
        {
            double result = 0;//計算結果
            if (NumberB == 0)
                throw new Exception("除數不能爲0.");

            result = NumberA / NumberB;//具體運算
            return result;//返回結果
        }//end Getresult
    }
    //end OpertionDiv

運算工廠: 

/// <summary>
    /// 簡單工廠類,根據需求實例化類。
    /// </summary>
    public class OperationFactory
    {
        /// <summary>
        /// 實例化具體的運算類
        /// </summary>
        /// <param name="operate">運算符</param>
        /// <returns>返回具體實例化的類</returns>
        public static Operation createOperate(string operate)

        {
            Operation oper = null;//實例化父類,從新賦值。
            //判斷
            switch (operate)
            {
                case "+":
                    //把父類,轉換成子類
                    oper = new OpertionAdd();//實例化加法類
                    break;
                case "-":
                    //把父類,轉換成子類
                    oper = new OpertiononSub();//實例化減法類
                    break;
                case "*":
                    //把父類,轉換成子類
                    oper = new OpertionMul();//實例化乘法類
                    break;
                case "/":
                    //把父類,轉換成子類
                    oper = new OpertionDiv();//實例化除法類
                    break;

            }//end swithc
            //返回結果
            return oper;
        }
    }//end OperationFactory

客戶端:

//確定按鈕
private void button1_Click(object sender, EventArgs e)
        {   //運算類
            Operation ope;
            //從新給父類,賦值。
         
            ope = OperationFactory.createOperate(txt2.Text);   //運算符
            ope.NumberA = int.Parse(txt1.Text);//給A賦值
            ope.NumberB =int.Parse( txt3.Text);//給B賦值
            //調用計算方法,輸出結果。
            double result = ope.GetResult();
            txt4.Text = result.ToString();

        }

 

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章