我想为我的游戏设计一个易于扩展的项目系统,我不需要修改现有的代码。我希望动态添加带有新效果的项目。
特征我的项目有共同点:
一个名字, 说明, 一个npc卖价, 如果它可以装备, 要求的水平, 如果它在战斗中可用, 如果它在战斗之外可用, 冷却时间
所以我可以将它封装到一个类中。但现在有项目效果。
实施例: 治愈x点健康, 治疗x点法力值, 删除debuff x, 添加buff x, 在装备上给出x个统计点, 装备时有x%几率创造其他效果, 等
这些可以合并为:治疗x点生命值和法力值。前四个是可用项目可以具有的效果的示例,而后两个是效果项目可以具有的示例。
它背后的想法是我在数据库中也有这个结构,我可以在我的数据库中添加一个带有新效果组合的新项目,我的代码读取它然后将它们组合成一个新的花式项目,没有我不得不修改。我需要修改代码的唯一一次是当我明显添加新效果时。
您如何将它们整合到设计模式中?
我想到了装饰师。是否有不同的,更好的设计模式,甚至可能是多种设计模式的组合?答案 0 :(得分:2)
您可以使用Decorator Pattern来修饰具有附加功能的对象,而无需对其进行修改。
答案 1 :(得分:2)
看来装饰图案对你的需求有好处。想想有不同上衣的披萨。你可以用许多上衣来扭曲基本披萨,最后你可以调用一个函数来总结奖品或其他什么。它是一种包装器,您将对象传递给下一个类。因此,您只需要一个基本类,并可以在需要时添加新的(顶级)类。
答案 2 :(得分:0)
这不是你问题的直接答案,但我认为它需要更多的词语而不是评论:
为一大块代码选择一个设计模式并不是你通常会预先做的事情(如果你这样做,准备好在你看到它工作后改变它);在你已经有一些工作代码并希望重构它之后,你更有可能做的事情。 - 一旦你开始编写代码,现在做出的任何决定都会受到许多(当前)未知因素的影响。
我建议您更多地考虑您想要创建的功能,行为和功能,然后开始编写代码以查看哪些有效,并进一步发展您的想法。尝试通过围绕诸如“工厂”,“装饰者”,“访客”等流行语预先设计问题来解决问题很可能不会引导您找到解决方案 - 设计是一个持续改进,变化和改进的迭代过程。细化。
另外,特别是在OO设计方面,在编写代码时要仔细考虑SOLID原则;他们应该帮助你在重构时做出决定