首页 > 解决方案 > 我应该使用什么设计模式?不同的类,相同的静态行为

问题描述

我正在开发一款 RPG 视频游戏。正如你在大多数 RPG 中所做的那样,如果你想要一个干净的界面,你会尝试在与玩家特别相关时突出显示某些文本。

例如,每次我想说“这次攻击造成 30 点寒冷伤害”时,我都会有这样的字符串:

“这次攻击造成 $VALUE$。”

然后$VALUE$将被实时替换为"30 [ICON] Cold Damage"

这一切都已经完成,并且运行良好。然而,随着更多效果、技能、攻击类型和角色的添加,我的代码变得臃肿不堪。现在,我的字符串解析器有一堆静态方法,比如:

    public static string ColdDamage(int amount) 
    {
        return <a formatted string for cold damage>
    }

事情是这样的:攻击类型遵循这种格式。技能、效果、武器以及介于两者之间的所有东西也是如此,包括角色(我们展示了一个小肖像并突出显示了名称)。

================================

话虽如此,这是我的(可能的)解决方案:

我改变了我的 StringsParser 类,所以我可以这样做:

    public static string FancyUpMyText(int amount, string text, string colorHex, string iconRef) 
    {
        return <a formatted string for anything you want>
    }

但是,看看这 4 个参数。这将严重混淆代码。更不用说并非所有内容都遵循相同的格式。有时,我想说“30 [ICON] 冰冷伤害”。有时是“[ICON]攻击+10”。我需要一个更具体的解决方案,否则我最终会得到 15 个方法,每个方法都有一堆参数,所有这些方法在它们庞大的、臃肿的返回语句中只有微小的变化。

或者,我可以添加一个“IFancyDisplay”接口并让它们都实现它。但是,我需要方法是静态的,因为我们已经使用了访问者模式来处理许多情况,而且我并不总是在所有情况下都可以使用整个对象的信息。使用“ClassDamageCold.GetFancyText(30);”会很棒,但我不能在接口上创建静态方法

所以,作为这个 C#,多重继承是不可能的,并且有这么多分散在代码中的元素应该共享一个共同的行为......

有什么我可以使用的模式,或者我的 StringsParser 会膨胀到被遗忘吗?

注意:有些对象会有多种方法(例如“Health +30”和“15% Health”),因此这里的访问者可能不是最佳选择。如果可以的话,我会创建多个接口(IFancyDisplayPercentage、IFancyDisplayInteger、...),每个接口都有 1 个方法,并根据每个类的需要实现它们。

请帮忙 :)

非常感谢您!

标签: design-patternsdependenciesbehaviorvisitor-patterndecoupling

解决方案


推荐阅读