程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 設計模式:工廠方法

設計模式:工廠方法

編輯:C#基礎知識

工廠方法模式(Factory Method):定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。

namespace SimleFactory
{
    public class Operation
    {
        public double NumberA { get; set; }
        public double NumberB { get; set; }
        public virtual double GetResult()
        {
            double result = 0;
            return result;
        }
    }
    public class OperationAdd:Operation
    {
        public override double GetResult()
        {
            return NumberA + NumberB;
        }
    }
    public class OperationSub : Operation
    {
        public override double GetResult()
        {
            return NumberA - NumberB;
        }
    }
    public class OperationMul : Operation
    {
        public override double GetResult()
        {
            return NumberA * NumberB;
        }
    }
    public class OperationDiv : Operation
    {
        public override double GetResult()
        {
            if (NumberB == 0)
                throw new Exception("除數不能為0.");
            return NumberA / NumberB;
        }
    }
    /// <summary>
    /// 簡單工廠
    /// </summary>
    public class OperationFactory
    {
        public static Operation CreateOperation(string operate)
        {
            Operation oper = null;
            switch(operate)
            {
                case "+":
                    oper = new OperationAdd();
                    break;
                case "-":
                    oper = new OperationAdd();
                    break;
                case "*":
                    oper = new OperationAdd();
                    break;
                case "/":
                    oper = new OperationAdd();
                    break;
            }
            return oper;
        }
    }
    /// <summary>
    /// 工廠方法
    /// </summary>
    public interface IFactory
    {
        Operation CreateOperation();
    }
    public class AddFactory : IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationAdd();
        }
    }
    public class SubFactory:IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationSub();
        }
    }
    public class MulFactory:IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationMul();
        }
    }
    public class DivFactory:IFactory
    {
        public Operation CreateOperation()
        {
            return new OperationDiv();
        }
    }
}
View Code

測試代碼:

            IFactory factory = new AddFactory();
            Operation oper= factory.CreateOperation();
            oper.NumberA = 1;
            oper.NumberB = 2;
            double result = oper.GetResult();
            Assert.AreEqual(result, 3);
View Code
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved