iT邦幫忙

2022 iThome 鐵人賽

DAY 11
1

今天介紹的是工廠模式,因為會跟明天的 Abstract Factory 有點關係,所以先來說一下,這個工廠模式,相對我們前幾天談到的其他模式都還要單純很多,也很好懂,就是建立一個 Factory 類別,裡面有個方法會去回傳實例,而回傳的實例們都是去實作同一個介面。

Factory - 定義

提供一個工廠介面,將產生實體的程式碼交由子類別各自實現。

https://ithelp.ithome.com.tw/upload/images/20220920/20136443oQIoJkSnkD.jpg

(圖片來源:https://www.tutorialspoint.com/design_pattern/images/factory_pattern_uml_diagram.jpg)

範例 UML

https://ithelp.ithome.com.tw/upload/images/20220925/20136443JsXDxqRwNQ.png

不囉嗦上Code!

(參考自:https://www.tutorialspoint.com/design_pattern/factory_pattern.htm)

using System;
using System.Collections.Generic;
using System.Text;

namespace DAY11_Factory
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 建立工廠
            ShapeFactory shapeFactory = new ShapeFactory();

            // 透過不同參數指定回傳不同實體回來
            IShape shape1 = shapeFactory.GetShape("Circle");
            shape1.Draw();

            IShape shape2 = shapeFactory.GetShape("Rectangle");
            shape2.Draw();

            IShape shape3 = shapeFactory.GetShape("Square");
            shape3.Draw();

            Console.ReadLine();
        }
    }

    public class ShapeFactory
    {
        public IShape GetShape(string shapeType)
        {
            if (shapeType == null)
            {
                return null;
            }
            Type type = Type.GetType($"DAY11_Factory.{shapeType}");
            return (IShape)Activator.CreateInstance(type);
        }
    }

    public interface IShape
    {
        void Draw();
    }

    public class Rectangle : IShape
    {
       public void Draw()
        {
            Console.WriteLine("長方形畫好了!");
        }
    }

    public class Circle : IShape
    {
        public void Draw()
        {
            Console.WriteLine("圓形畫好了!");
        }
    }

    public class Square : IShape
    {
        public void Draw()
        {
            Console.WriteLine("正方形畫好了!");
        }
    }
}
  • 結果

https://ithelp.ithome.com.tw/upload/images/20220920/20136443qzZJPhugsA.png

簡單的小結

如果從UML圖來看的話,Factory模式跟 Strategy模式長的其實差不多,結構很類似,但實際上用法是不同的,Factory模式是根據定義將物件回傳,而Strategy模式則是聚集了物件,並且去實現該物件所具有的行為。

我們明天再來看看更高級的工廠吧~


上一篇
【DAY10】Bridge模式 - 矛盾的解釋
下一篇
【DAY12】Abstract Factory模式 - 升級工廠2.0
系列文
勇闖秘境!探索物件導向背後的設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言