1. 程式人生 > >工廠方法模式(FactoryFunction Pattern)

工廠方法模式(FactoryFunction Pattern)

工廠方法模式的介紹

  在簡單工廠模式中講到簡單工廠模式的缺點,有一點是——簡單工廠模式系統難以擴充套件,一旦新增新產品就不得不修改簡單工廠方法,這樣就會造成簡單工廠的實現邏輯過於複雜,工廠方法模式可以解決簡單工廠模式中存在的這個問題,下面就具體看看工廠模式是如何解決該問題的。

  工廠方法模式之所以可以解決簡單工廠的模式,是因為它的實現把具體產品的建立推遲到子類中,此時工廠類不再負責所有產品的建立,而只是給出具體工廠必須實現的介面,這樣工廠方法模式就可以允許系統不修改工廠類邏輯的情況下來新增新產品,這樣也就克服了簡單工廠模式中缺點。

工廠方法模式UML圖

這裡寫圖片描述

工廠方法模式的實現

Food.cs:

using System;

namespace DesignModelDemo.FactoryFunction
{
    abstract class Food
    {
        public abstract void Print();
    }
}

PotatoFood.cs:

using System;

namespace DesignModelDemo.FactoryFunction
{
    class PotatoFood:Food
    {
        public override void Print()
        {
            Console.WriteLine("炒好了一盤土豆絲..."
); } } }

TomatoFood.cs:

using System;

namespace DesignModelDemo.FactoryFunction
{
    class TomatoFood : Food
    {
        public override void Print()
        {
            Console.WriteLine("炒好一盤西紅柿...");
        }
    }
}

FoodFactory.cs:

using System;

namespace DesignModelDemo
.FactoryFunction {
abstract class FoodFactory { public abstract Food CreatFood(); } }

PotatoFoodFactory.cs:

using System;

namespace DesignModelDemo.FactoryFunction
{
    class PotatoFoodFactory:FoodFactory
    {
        public override Food CreatFood()
        {
            return new PotatoFood();
        }
    }
}

TomatoFoodFactory.cs:

using System;

namespace DesignModelDemo.FactoryFunction
{
    class TomatoFoodFactory:FoodFactory
    {
        public override Food CreatFood()
        {
            return new TomatoFood();
        }
    }
}

Customer.cs:

using System;

namespace DesignModelDemo.FactoryFunction
{
    class Customer
    {
        static void Main(string[] args)
        {
            //炒一盤西紅柿
            FoodFactory foodFactory = new TomatoFoodFactory();
            foodFactory.CreatFood().Print();

            //炒一盤土豆絲
            FoodFactory foodFactory2 = new PotatoFoodFactory();
            foodFactory2.CreatFood().Print();

            Console.Read();
        }
    }
}