前言
工廠模式介紹,以RPG遊戲建立各個職業來實作工廠模式
工廠模式是很常見的設計模式,工廠模式分為工廠和要製造的商品,工廠主要負責生產商品,商品主要是呈現有哪些功能和特性,就以RPG的職業為例子來實作工廠模式
實作工廠模式
流程介紹
1.建立character的interface
2.實作戰士和法師這個兩職業
3.建立工廠的interface
4.建立產生戰士的工廠和產生法師的工廠
5.產出這兩個職業
程式碼呈現
腳色interface
1 2 3 4 5 6 7 8 9 10
| public interface Icharacter { string Name { get; set; } int Strength { get; set; } int Magic { get; set; }
public void skill() { } public void attack() { }
}
|
法師腳色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Mage : Icharacter { public string Name { get; set; } public int Strength { get; set; } public int Magic { get; set; }
public Mage() { Name = "法師"; Strength = 1; Magic = 5; } public void skill() { Console.WriteLine("十字展造成" + Strength*5+"傷害"); } public void attack() { Console.WriteLine(Name + "攻擊造成" + Strength + "傷害"); } }
|
戰士腳色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Warrior : Icharacter { public string Name { get; set; } public int Strength { get; set; } public int Magic { get; set; }
public Warrior() { Name = "戰士"; Strength = 5; Magic = 1; } public void skill() { Console.WriteLine("隕石術造成"+Magic*10+ "傷害");
} public void attack() { Console.WriteLine(Name + "攻擊造成" + Magic + "傷害"); } }
|
工廠interface
1 2 3 4 5 6
| interface IFactory {
public Icharacter CreateCharacter();
}
|
產生戰士工廠
1 2 3 4 5 6 7
| class WarriorFactory : IFactory { public Icharacter CreateCharacter() { return new Warrior(); } }
|
產生法師工廠
1 2 3 4 5 6 7
| class MageFactory : IFactory { public Icharacter CreateCharacter() { return new Mage(); } }
|
產生兩個職業
1 2 3 4 5 6 7 8 9 10 11
| static void Main(string[] args) { WarriorFactory warriorFactory = new WarriorFactory(); var warrior = warriorFactory.CreateCharacter(); MageFactory mageFactory = new MageFactory(); var mage = mageFactory.CreateCharacter(); warrior.attack(); warrior.skill(); mage.attack(); mage.skill(); }
|
顯示結果
結語
優點:
1.一個調用者想創建一個對象,只要它的名字就可以了。
2.擴展性高如果想增加一個產品,只要擴展一個工廠類就可以。
3.屏蔽產品的具體實現,調用者可以只涉及產品的接口。
缺點:
每次增加一個產品時,都需要增加一個具體類和對象實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事