工廠方法模式

工廠方法模式``

在這裏插入圖片描述

代碼塊

運算類

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

namespace FactoryModel
{
    class Operation
    {
        public double Number1;
        public double Number2;
        public virtual double GetResult()
        {
            return 0;
        }
    }
}

加法類

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

namespace FactoryModel
{
    class AddOperation : Operation
    {
        public override double GetResult()
        {
            return Number1 + Number2;
        }
    }
}

減法類

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

namespace FactoryModel
{
    class SubOperatoin: Operation
    {
        public override double GetResult()
        {
            return Number1 - Number2;
        }
    }
}

乘法類

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

namespace FactoryModel
{
    class MulOperation: Operation
    {
        public override double GetResult()
        {
            return Number1 * Number2;
        }
    }
}

除法類

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

namespace FactoryModel
{
    class DivOperation: Operation
    {
        public override double GetResult()
        {
            return Number1 / Number2;
        }
    }
}

抽象工廠運算類

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

namespace FactoryModel
{
    interface IOperation
    {
        Operation CreatOperation();
    }
}

加法工廠

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

namespace FactoryModel
{
    class AddFactory : IOperation
    {
        public Operation CreatOperation()
        {
            AddOperation oper = new AddOperation();
            return oper;
        }
    }
}

減法工廠

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

namespace FactoryModel
{
    class SubFactory : IOperation
    {
        public Operation CreatOperation()
        {
            Operation oper = new SubOperatoin();
            return oper;
        }
    }
}

乘法工廠

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

namespace FactoryModel
{
    class MulFactory : IOperation
    {
        public Operation CreatOperation()
        {
            Operation oper = new MulOperation();
            return oper;
        }
    }
}

除法工廠

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

namespace FactoryModel
{
    class DivFactory : IOperation
    {
        public Operation CreatOperation()
        {
            Operation oper = new DivOperation();
            return oper;
        }
    }
}

客戶端

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

namespace FactoryModel
{
    class Programs
    {
        static void Main(string[] args)
        {
            IOperation ioperation = new AddFactory();
            Operation oper = ioperation.CreatOperation();
            oper.Number1 = 1;
            oper.Number2 = 2;
            oper.GetResult();
            Console.WriteLine(oper.GetResult().ToString());
            Console.ReadKey();
        }
    }
}

**

工廠模式和工廠方法模式區別

簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇動態實例化相關的類,對於客戶端來說,去除了產品依賴。但是問題所在 如果要加一個新的算法或者方法的功能,在前文的工廠模式裏面我們是一定需要給運算工廠類的方法增加Case分支條件,這裏也就是修改原有的類。這等於說我們不但對擴展(對於一個軟件來說擴展了新的功能)開放了 也對修改開放了,違背了開放封閉原則。
工廠方法模式來了--定義一個用於創建對象的接口,讓自雷決定實例化哪一個類。工廠方法模式是一個類的實例化延遲到其子類。這時我們要增加一個新的方法 只需要增加一個運算類和其相應的工廠類就可以了,“”讓整個工廠和產品體系其實都沒有修改的變化,而只是擴展的變化 並且符合了開放--封閉原則的精神“

## 缺點
每增加一個產品就需要加一個產品工廠的類,增加了額外的開發量
工廠方法模式實現時,客戶端需要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法吧簡單工廠的內部邏輯判斷移到了客戶端進行,如果想要增加功能,原本是需要修改工廠類的,現在則是修改客戶端。

**

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