微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该使用什么设计模式?不同的类,相同的静态行为

如何解决我应该使用什么设计模式?不同的类,相同的静态行为

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

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

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

$VALUE$ 将被实时替换为 “30 [ICON] 冰霜伤害”

  • [ICON] 将是寒冷伤害类型(例如蓝色雪花)的图标。
  • 数字(在本例中为 30)将以粗体显示
  • “冷害”字样将带有浅蓝色阴影。

这一切都已经完成了,并且运行良好。然而,随着更多效果、技能、攻击类型和角色的加入,我的代码很膨胀。现在,我的字符串解析器有一堆静态方法,例如:

    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] Attack +10”。我需要一个更具体的解决方案,否则我最终会得到 15 个方法,每个方法都有一堆参数,所有这些方法在它们庞大而臃肿的 return 语句中只有微小的变化。

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

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

是否有任何我可以使用的模式,或者此时我的 StringsParser 是否会膨胀而被遗忘?

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

请帮忙:)

在此先非常感谢您!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?