4

我想为我的游戏设计一个易于扩展的项目系统,我不需要对现有代码进行太多修改。我想即时添加具有新效果的项目。

我的物品的共同点:

名称,描述,npc售价,是否可以装备,所需等级,是否可在战斗中使用,是否可在战斗外使用,冷却时间

所以我可以把它封装到一个类中。但是现在有物品效果。

示例:治疗 x 点生命值,治疗 x 点法力值,移除减益 x,添加增益 x,装备时给予 x 属性点,装备时有 x% 几率产生其他效果等。

这些可以组合起来,例如:治疗 x 生命值和法力值。前四个是可用物品可以具有的效果的示例,而后两个是可装备物品可以具有的效果的示例。

它背后的想法是我在数据库中也有这个结构,我可以在我的数据库中添加一个具有新效果组合的新项目,然后我的代码读取它并将它一起构建成一个新的花哨项目,而无需我修改很多。我唯一需要修改代码的时候是明显添加新效果的时候。

您将如何将其放在设计模式中?

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

4

3 回答 3

2

You can use Decorator Pattern to decorate your objects with additional functionality without modifying them.

于 2012-11-10T13:49:56.547 回答
2

It seems a decorator pattern is good for your needs. Think of a pizza with different tops. You can warp the basic pizza with many tops and at the end you call a function to sum the prize or whatever. It's a kind of wrapper and you pass the object to the next class. Hence you need only a basic class and can add new (top)-class when you need it.

于 2012-11-10T13:50:54.890 回答
0

这不是对您问题的直接回答,尽管我认为它需要更多的词而不是评论:

为一大段代码选择一个设计模式不是你通常会预先做的事情(如果你这样做,准备好在你看到它工作后改变它);在您已经有一些工作代码并希望对其进行重构之后,您更有可能这样做。- 一旦您开始编写代码,您现在做出的任何决定都有可能受到许多(当前)未知因素的影响。

我建议您更多地考虑您想要创建的特性、行为和功能,然后开始编写代码以查看哪些有效并进一步发展您的想法。试图通过围绕“工厂”、“装饰者”、“访客”等流行词预先设计来解决问题,很可能不会让你找到解决方案——设计在很大程度上是一个不断改进、改变和不断迭代的过程。细化。

顺便说一句,特别是在 OO 设计方面,在编写代码时要仔细考虑 SOLID 原则;当您进行重构时,它们应该可以帮助您做出决定

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

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

于 2012-11-10T13:55:37.487 回答