2012-11-10 75 views
4

我想为我的游戏设计一个易于扩展的物品系统,我不需要修改现有的代码。我想随时添加带有新效果的物品。使用什么样的设计模式?

特质我的项目有一个共同点:

的名称, 描述, 一个NPC卖出价, 如果可以装备它, 要求的水平, 如果是在战斗中使用, 如果可以在战场以外使用, 冷却时间

所以我可以把它封装到一个类中。但现在有项目效应。

例子: 愈合X健康点, 治愈X点法力值, 消除DEBUFF X, 加BUFF X, 给出了装备X属性点, 有X%的几率造成一些其他影响装备的时候, 等等。

而这些可以像这样组合:医疗x生命值和法力值。前四个是可用项目可以具有的效果的示例,而最后两个是可等效项目可以具有的效果的示例。

其背后的想法是,我在数据库中也有这样的结构,我可以在数据库中添加一个新的效果组合的新项目,然后我的代码读取它并将它一起构建成一个新的奇特项目,没有我必须修改太多。我需要修改代码的唯一时间是显然添加新的效果。

你会如何把它放在一起的设计模式?

我想到了装饰者。对于这个或者甚至是多种设计模式的组合,是否有不同的更好的设计模式?

+0

最简单的方法是给一个ID,每个效果,实现每个效果(和复制的综合效果代码)。如果有多种组合并且组合一次最多只能有2种效果,则可以使用2个ID。至于OOP部分,您可以拥有一个实现每个项目的Effect接口的对象列表。 – nhahtdh

回答

2

看起来装饰者模式对你的需求是有好处的。想想有不同上衣的披萨。你可以用许多顶部扭曲基本披萨,最后你可以调用一个函数来总结奖品或其他。这是一种包装,你将对象传递给下一个类。因此,您只需要一个基本类,并可以在需要时添加新的(顶级)类。

2

您可以使用Decorator Pattern使用附加功能修饰对象而不用修改它们。

0

这不是直接回答你的问题,但我认为它需要更多的话比可以放入一个注释:

采摘的代码块的设计模式是不是你通常会做(如果你这样做,准备在你看到它工作后改变它)。这是在你已经有了一些工作代码并希望重构它之后你更可能做的事情。 - 一旦您开始编写代码,您现在做的任何决定都会受到许多(当前)未知因素的影响。

我建议您更多地考虑您想要创建的功能,行为和功能,然后开始编写代码以查看哪些方法可行并进一步开发您的想法。试图通过围绕像“工厂”,“装饰者”,“访问者”等流行语进行设计来解决问题很可能不会导致您找到解决方案 - 设计是一个持续改进,改变和改进的迭代过程细化。另外,特别是面向对象设计,在编写代码时要仔细考虑SOLID原则;他们应该帮助你做出决定,当你来到重构

http://www.blackwasp.co.uk/SOLIDPrinciples.aspx

http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod

相关问题