我有一个关于面向对象编程中不同概念的命名的问题。
不试图用一般的方法来解释它,让我用两个不同概念的例子来说明它。
我认为一个很好的方法来说明这是如何处理损害免疫在游戏中。让我们来谈谈火灾,它破坏了里面的实体。例如,假设有一些灵魂不受火的影响,所以当他们走到那里时不应该受到伤害。
有两种方法来处理这种例子情况(实际上是三种,但一种不是很“有用”)。我会说出最后是什么)。
首先,实体类包含一个名为isImmuneToFire的布尔方法/属性,而Fire类中负责处理破坏过程的方法是检查该方法/属性。如果此布尔值为真,只需返回方法,如果不是,则调用实体类中的方法damageBy(剂量、源)。
其次,火灾内部的损伤处理方法只需调用damageBy(数量、源).有关豁免的一切都是由实体类在方法的单个实现中处理的。这更像是将实际的、重复的免疫处理工作委托给负责的类,同时给予他们更精确的控制(例如,一些实体在被击中一次后可以豁免5秒的射击伤害,或者玩家可以穿戴火焰免疫盔甲等等)。
我希望我能把它说明得足够好。这两个不同的概念是有名字的,还是它们太“边缘”而得不到名字?
前面提到的第三个概念就是强行检查损坏处理方法中的对象(例如,用instanceof )来检查它们的类,从而决定是否应该处理损坏。当然,这是一种简单的方法,只会破坏任何动态方面和模块性。但如果有人有这个名字,我当然会接受的。在此之前,我将继续将其称为BFSJ Code的概念,简称为Brute-Force Static Jumble Code。
发布于 2015-10-09 17:52:53
如果允许我稍微修改一下你的问题,我宁愿从双重调度的角度来考虑这个问题。不是让损坏源检查它是否会损坏一个对象,或者接收damageBy(amount, source)消息的对象在所有可能的source值之间有两个开关,您可以通过让Fire发送消息fireDamage(amount)来消除两个位置的条件逻辑。这样,伤害的来源就不必检查对象是否对其免疫,并且对象将知道在其源特定的方法中该做什么。
https://stackoverflow.com/questions/33026238
复制相似问题