簡體   English   中英

c# 如何使用不同的簽名(?)

[英]c# how to approach Abstract Factory with different signatures (?)

我想弄清楚如何在游戲中創建不同的壞人。

假設我有 2 個派系。 聖騎士和盜賊,以及每個派系的 3 種戰士類型

我有一個抽象工廠來生成他們攜帶的設備,但我不確定如何讓它工作。 這是我所擁有的

enum PaladinWarrior
{
    Squire,
    Novice,
    Knight

}

/// <summary>
/// abstract weapon factory
/// </summary>
abstract class EquipmentFactory
{
    public abstract IWeapon GetWeapon(Enum warriorType);
    /// maybe some other methods like armor and hp
}

/// <summary>
/// concrete weapon factory
/// </summary>
class PaladinWeaponFactory : EquipmentFactory
{
    public override IWeapon GetWeapon(PaladinWarrior warriorType)
    {
        switch (warriorType)
        {
            case PaladinWarrior.Squire:
                return new ShortSword();
            case PaladinWarrior.Novice:
                return new LongSword();
            case PaladinWarrior.Knight:
                return new GreatSword();
            default:
                break;
        }
        
    }
}

/// another factory for the thieves, etc.

我面臨的問題是,通過指定 Enum 類型,它不再匹配抽象工廠,並且不會直接使其工作。 換句話說,抽象工廠的 getWeapon 與 Palading 的簽名不同,我不知道如何處理。

我想知道哪種模式/工作流程會更好? 考慮到我有多個派系,每個派系都需要不同的戰士(當然,裝備不同)。

編輯:我想要工廠,所以我可以像這樣創建一個戰士:


Warrior goodGuy = new Warrior(PaladinWarrior.Squire)
Warrior badGuy = new Warrior(ThievesWarrior.BBEV) 

並讓戰士類能夠制造盔甲和裝備。 我不知道除了工廠之外還有什么其他模式可以做到這一點。

由於問題是在游戲中添加戰士類型,我將從游戲開發的角度來回答

使用不同的枚舉和不同的工廠來創建戰士的方法過於復雜,合並枚舉並且只有一個工廠來創建整個Warrior對象會簡單得多。

然而,在“適當的游戲開發”中,即使這樣也不是一個好主意,因為您希望將添加和修改這些戰士類型的選擇權交給不想(也不應該)修改代碼的設計師。

相反,您想讓您的方法數據驅動,這意味着創建Warrior所需的所有數據都使用預定義格式(可以是常見的格式,如 JSON 或完全自定義的格式)存儲在外部文件或數據庫中)。 然后您的代碼所要做的就是讀入該數據並基於它創建對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM