1. 程式人生 > >C#簡單工廠模式

C#簡單工廠模式

    剛剛開始設計模式,有了視訊的基礎,寫程式碼相對容易一些,大話設計的第一章,首先就是程式碼規範,不論是以前學習VB還是準備考試的C++,到現在的C#,還有以後的Java等等,程式碼規範都是很重要的,所以從現在養成一個好習慣,規範自己的程式碼,培養專業素質。

    跟著大鳥和小菜一步一步學習,學習了第一個模式——簡單工廠模式

    我們知道,簡單工廠模式是類的建立模式,根據提供給它的資料返回幾個可能類中的一個類的例項。

    優點:工程類中包含了必要地邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對客戶端來說,去除了與具體產品的依賴。


如下例子,是一個關於加減乘除運算的簡單工廠模式。結構圖如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 簡單工廠模式演算法
{
    class Program
    {
        //客戶端程式碼
        static void Main(string[] args)
        {
            Operation oper;
            oper = OperationFactory.createOperate("+");//
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result = oper.GetResult();
            Console.WriteLine("結果是:" + result);
        }
        //Operation運算類
        public class Operation  
        {
            private double _numberA = 0;
            private double _numberB = 0;
            public double NumberA
            {
                get { return _numberA; }
                set { _numberA = value; }
            }
            public double NumberB
            {
                get { return _numberB; }
                set { _numberB = value; }
            }
            public virtual double GetResult()
            {
                double result = 0;
                return result;
            }
        }
        class OperationAdd : Operation   //加法計算
        {
            public override double GetResult()
            {

                double result = 0;
                result = NumberA + NumberB;
                return result;
            }
        }
        class OperationSub : Operation    //減法計算
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA - NumberB;
                return result;
            }
        }
        class OperationMul : Operation     //乘法計算
        {
            public override double GetResult()
            {
                double result = 0;
                result = NumberA * NumberB;
                return result;
            }
        }
        class OperationDiv : Operation    //除法計算
        {
            public override double GetResult()
            {
                double result = 0;
                if (NumberB == 0)               //考慮除法的除數為0時沒有意義
                    throw new Exception("除法不能為0");
                result = NumberA / NumberB;
                return result;
            }
        }//簡單運算工廠類
    
        public class OperationFactory            //定義OperationFactory(運算子工廠)
        {
            public static Operation createOperate(string operate)
            {
                 Operation oper = null;
                 switch (operate)
                {
                     case "+":
                         oper = new OperationAdd();
                         break;
                     case "-":
                         oper = new OperationSub();
                         break;
                     case "*":
                          oper = new OperationMul();
                          break;
                     case "/":
                          oper = new OperationDiv();
                          break;
                 }
                return oper;
            }
        }
    }
}
         感覺和他差不多的是工廠模式,它定義一個用於建立物件的介面,讓子類決定例項化哪一個類,工廠方法使一個類的例項化延遲到其子類。工廠方法模式實現時,客戶端需要決定例項化哪一個工廠來實現運算類,選擇判斷的問題還是存在的。

       和簡單工廠對比來說,它的內部邏輯判斷移到了客戶端程式碼來進行,想要加功能,本來說該工廠類的,現在是修改客戶端。