範例:世紀帝國(工廠方法模式)

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# 來寫範例。

Share