追蹤
兔子也會的遊戲設計
關於部落格
一個推廣XNA與OGRE的園地,當然還有其他關於遊戲設計的主題,歡迎有興趣的同好交流指教
  • 104824

    累積人氣

  • 0

    今日人氣

    0

    追蹤人氣

工廠模式

abstract product Factory(type);
也就是工廠傳回一個產品 至於產品怎麼產生、產生甚麼,就由子類別來決定。
舉一個應用在即時戰略遊戲中的例子,遊戲中一定有建築物與兵種單位,
建築物可以用一個抽象類別來代表,其他建築物都繼承它,
兵種單位也是一樣。 最後由繼承的建築物來決定生產何種兵種,
下面是程式碼,主要是簡介工廠模式的運作原理,看完應該會覺得很熟悉
原來這種方式早已在我們身邊。


using System;

namespace Factory
{
   

    //抽象的建築物工廠
    public abstract class BuildFactory
    {
        public abstract Unit CreateUnit();       
    }

    //指揮中心 繼承建築物工廠
    public class CommandCenter : BuildFactory
    {
        public override Unit CreateUnit()
        {
            return new Worker();
        }
    }

    //軍營 繼承建築物工廠
    public class Barrack : BuildFactory
    {
        public override Unit CreateUnit()
        {
            return new Soldier();
        }
    }

    //抽象單位   
    public abstract class Unit
    {
        public abstract void DoSomething();               
    }

    //工人 繼承抽象單位
    public class Worker : Unit
    {
        public override void DoSomething()
        {
            Console.WriteLine("I'm a Worker and I'm creating a building");
        }
    }

    //士兵 繼承抽象單位
    public class Soldier : Unit
    {
        public override void DoSomething()
        {
            Console.WriteLine("I'm a Soldier and I'm attacting a enmy");
        }
    }

    class Client
    {
        [STAThread]
        static void Pause()
        {
            Console.WriteLine("Press Enter To Continue....");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            //建了一個指揮中心
            BuildFactory building1 = new CommandCenter();
            //做了甚麼單位不管,次類別指揮中心會決定
            Unit unit1 = building1.CreateUnit();
            //生出來的單位做他自己的工作
            unit1.DoSomething();

            //建了一個軍營
            BuildFactory building2 = new Barrack();
            //做了甚麼單位不管,次類別軍營會決定
            Unit unit2 = building2.CreateUnit();
            //生出來的單位做他自己的工作
            unit2.DoSomething();
            Pause();
        }
    }

}

 

相簿設定
標籤設定
相簿狀態