1

我正在为使用装饰器模式的正确性而苦苦挣扎。让我们以暗黑破坏神2游戏为例。有一些物品(例如)剑,您可以用珠宝装饰,剑会发生变化,例如更多的攻击点或剑名修改。所以从这个角度来看,剑是一个可以被装饰的具体物体,而珠宝则是装饰者。但是珠宝也可以作为独立的、独立的物品保留,它们也有名称、描述和其他说明符。如何解决这个问题?我想要一个独立的“宝石”,可以得到他的名字,描述,但我也可以用这颗宝石装饰一些剑。请注意,jevel 和剑都有共同的说明符,例如独立的名称或描述。一边用jevel装饰剑,

4

1 回答 1

1

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

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

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

但请注意,这只是一个选项,根据上下文可能会有些过大。如果您将珠宝视为库存项目,那么使用其他方法可能更有意义(我故意避免使用模式一词,因为从“我需要为此使用某种模式”的想法开始通常会导致错误的代码)。只需遍历库存项目列表并让它们中的每一个从命中中添加或删除强度点也可能有意义,这更类似于访问者(如果您想要一个熟悉的名字)。

于 2013-04-14T12:31:11.043 回答