装饰设计模式问题

时间:2013-04-14 11:15:09

标签: design-patterns

我正在努力使用装饰模式的正确性。 让我们以暗黑破坏神2游戏为例。有些物品(例如)剑,你可以用珠宝装饰,剑变得更换,例如更多的攻击点或剑名称修改。所以在这个观点上,剑是一个具体的物体,将被装饰,珠宝是装饰。但珠宝也可以保持独立,独立的物品,他们也有名称,描述和其他说明。如何解决这个问题?我想要一个独立的“宝石”,可以得到他的名字,描述,但我也可以用这个宝石装饰一些剑。请注意,jevel和the sword都具有独立的名称或描述等通用说明符。在用宝石装饰一把剑时,剑必须成为一个新名称,例如“紫水晶剑,而得到独立紫水晶的名称,它应该归还”一个古老的紫水晶“。任何想法?

1 个答案:

答案 0 :(得分:1)

珠宝不应该是装饰者,因为它们不代表相同的功能,即剑。但是,您可以使用SwordWithJewels或伪代码:

interface ISword { Stab(); }
class Sword : ISword { Stab();  }
class SwordWithJewels : ISword { Stab(); }

SwordWithJewels应该在施工过程中直接或间接地通过另一个拥有它们的对象将珠宝作为参数,并使用该信息来计算命中强度或名称或任何你需要的东西。

但请注意,这只是一个选项,根据具体情况可能有些过分。如果你认为珠宝是一个库存项目,那么使用其他方法可能更有意义(我故意避免单词模式开头的想法“我需要使用一些模式”通常导致错误的代码)。只需遍历库存物品清单并让他们每个人从点击中添加或删除强度点也可能有意义,这更类似于访客(如果你想要一个熟悉的名字)。