工廠方法
目的:提供一個工廠介面,將產生實體程式碼交由子類別各自實現。
工廠方法是延伸了簡單工廠,因為簡單工廠會破壞OCP原則。
優點:
1.只需關心對應工廠,無須關心創建細節。
2.符合閉關原則,只需新增工廠類別與產品,無須修改程式,擴展性佳。
缺點:
1.因為添加新的產品或類別,增加系統複雜度。
2.考量到系統可擴展性,需引入抽象層,增加了系統抽象和理解難度。
 
    class Program
    {
        static void Main(string[] args)
        {
            Creator[] creators = new Creator[2];
            creators[0] = new ConcreCreatorA();
            creators[1] = new ConcreCreatorB();
            foreach (var creator in creators)
            {
                Product product = creator.FactoryMethod();
                Console.WriteLine(product.GetType().Name);
            }
        }
    }
    abstract class Product
    {
    }
    class ConcreateProductA : Product
    {
    }
    class ConcreateProductB : Product
    {
    }
    abstract class Creator
    {
        public abstract Product FactoryMethod();
    }
    class ConcreCreatorA : Creator
    {
        public override Product FactoryMethod()
        {
            return new ConcreateProductA();
        }
    }
    class ConcreCreatorB : Creator
    {
        public override Product FactoryMethod()
        {
            return new ConcreateProductB();
        }
    }
    abstract class Product
    {
    }
    class ConcreateProductA : Product
    {
    }
    class ConcreateProductB : Product
    {
    }
    interface Ifactory
    {
        Product CreateProduct();
    }
    class ConcreCreatorAFactory : Ifactory
    {
        public Product CreateProduct()
        {
            Console.WriteLine("A");
            return new ConcreateProductA();
        }
    }
    class ConcreCreatorBFactory : Ifactory
    {
        public Product CreateProduct()
        {
            Console.WriteLine("B");
            return new ConcreateProductB();
        }
    }
                    元哥的筆記