我是否应该使用适用于所有情况的单个代码或适用于特定情况的多个代码?

时间:2015-02-08 01:10:58

标签: design-patterns

我正在开发一款为玩家升级的游戏,例如Health Regeneration和Max Health。在“升级”屏幕中,对于每次升级,我列出名称和级别,并使用增加和减少按钮来增加和减少级别。使用称为gems的货币购买升级。 1个gem可以将升级级别提高1。

提高某个升级级别的要求是玩家拥有的宝石数量大于0且升级级别不等于最高级别。

降低某个升级级别的要求是升级级别不为0.

当升级级别增加或减少时,我希望增加按钮或减少按钮为绿色。当它不可用时,我希望它是红色的。

我在升级类中启用和禁用增加和减少按钮的功能,这些按钮将按钮变为绿色/红色。即使按钮已经启用或禁用,或者按钮尚未生成,也可以调用启用/禁用功能(如果尚未执行该操作,则仅删除/添加绿色按钮/红色图像)。

我不知道应该使用哪种策略来调用按钮启用/禁用功能。我将在这里解释两种策略。

策略1

这是使用适用于所有情况的单一代码的策略。每次按下升级按钮,或按下重置按钮时,无论是否需要进行某些检查,都会根据上面提到的条件检查并启用或禁用所有升级中的两个按钮。

优点:易于编码,简单,代码齐全。

策略2

这是编写适用于特定情况的多段代码的策略。仅适用于一次升级的代码将写入Upgrade类,而不是Main类。例如,当某个升级的级别增加时,我只检查一次升级以查看它是否达到最大值,然后检查Main类是否有宝石。如果我们没有,则所有升级增加按钮都将被禁用。

优点:只有在需要检查时才会检查按钮。

此时我选择做的主要是策略1,除了我会使用2个函数而不是1个。一个功能是增加升级时,然后我会检查是否需要禁用升级增加按钮,以及是否需要启用升级减少按钮。另一个功能是针对相反的情况。现在我对每个策略都有点担心。策略1似乎需要更多的运行时工作(它检查不需要检查的按钮),尽管实际的性能影响可以忽略不计。但是,策略2似乎需要更多的编码工作。例如,当我按下重置按钮时,策略1会使用相同的代码处理它,但在策略2中,我必须明确启用所有升级增加按钮并禁用所有升级减少按钮,这似乎不自然。我想知道我应该做些什么:战略1,战略2,或者我在本段开头提到的组合?

1 个答案:

答案 0 :(得分:0)

总体策略(包括在决定何时应用您的任何策略需求时)是"避免多次编码相同的事情"。如果你不止一次编写代码,就有机会出现几个意外的变化(例如一个版本中的一组错误,而不是另一个版本中的错误)和维护负担(如果你更改了一个,则必须通过所有其他版本)编码相同逻辑的地方,并更新每个地方。

使用策略1来处理根据您的设计适用于所有情况的操作。

使用策略2来处理根据您的设计特定于少数几种情况的行为。

您还可以合并策略,并在不同的点收集有意义的操作集(在使用一个操作的代码可能需要采用其他特定操作的意义上有意义)。