Pattern: 工廠方法模式
Class Diagram: 世紀帝國
情境:根據用戶端對兵種的需求,我們要生產對應的軍事單位
這邊我們省略軍事單位的定義。
可參考範例:世紀帝國(簡單工廠模式)。
1 2 3 4 5 6 7 8 9
| namespace DotNetCoreKata.DomainModels.AgeOfEmpires;
public static class Barracks { public static IUnit Create() { return new Unit(new Stick(), new Legs()); } }
|
1 2 3 4 5 6 7 8 9
| namespace DotNetCoreKata.DomainModels.AgeOfEmpires;
public static class ArcheryRange { public static IUnit Create() { return new Unit(new Bow(), new Legs()); } }
|
1 2 3 4 5 6 7 8 9
| namespace DotNetCoreKata.DomainModels.AgeOfEmpires;
public static class Stable { public static IUnit Create() { return new Unit(new Sword(), new Horse()); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| using DotNetCoreKata.DomainModels.AgeOfEmpires; using DotNetCoreKata.Enums;
namespace DotNetCoreKata.Services.AgeOfEmpires;
public class Client { public IUnit Train(UnitCategory unitCategory) { Console.Write($"Ask resources to build unit: {unitCategory}.");
return unitCategory switch { UnitCategory.Military => Barracks.Create(), UnitCategory.Archer => ArcheryRange.Create(), UnitCategory.Knight => Stable.Create(), _ => Barracks.Create() };
} }
|
ʕ •ᴥ•ʔ:重讀一次 Design Pattern,改用 C# 來寫範例。