异地办案理念
Concepts of Handling Cases In Different Places
我对面向对象编程中不同概念的命名有疑问。
不试图通过一般方式解释它,让我用我所说的不同概念的两个例子来说明它。
我认为说明这一点的一个好方法是如何处理游戏中的伤害免疫。让我们谈谈会损坏走在里面的实体的火。举例来说,假设有对火免疫的精灵,那么他们走到那里应该不会受到伤害。
有两种方法可以处理这种示例情况(实际上是三种,但一种不是很好'useful'。我会在最后说明它是什么)。
首先,实体 class 包含一个名为 isImmuneToFire 的布尔值 method/attribute,Fire class 中负责处理破坏过程的方法正在检查它。如果此布尔值为真,则直接 return 方法,否则,调用实体中的方法 damageBy(amount, source) class.
其次,Fire内部的伤害处理方法只是调用damageBy(amount, source)。与免疫有关的一切都只是在实体 classes 的方法的单独实现中处理。这更像是将实际的、重复的免疫处理工作委托给负责的 classes,同时给予他们更准确的控制(例如,某些实体在被击中一次后可以免疫 5 秒的火焰伤害,或者玩家可以穿防火盔甲等)
我希望我能很好地说明它。这两个不同的概念有名字吗,还是它们太'marginal' 没有名字?
提到的第三个概念是暴力检查损坏处理方法中的对象(例如 Java 中的 instanceof
)的 classes 和从而决定是否应该处理损坏。这当然是一种简单的方法,只会破坏任何动态方面和模块化。但如果有人为此命名,我当然会接受。在那之前,我将继续称它为 BFSJ Code
的概念,Brute-Force Static Jumble Code
的缩写。
如果允许我稍微调整一下你的问题,我宁愿根据双重调度来考虑这个问题。不是让损坏源检查它是否会损坏对象,或者接收 damageBy(amount, source)
消息的对象在 source
的所有可能值之间有两个开关,您可以摆脱两者中的条件逻辑让 Fire
发送消息 fireDamage(amount)
代替。这样,伤害源就不必检查对象是否对其免疫,并且对象将知道在其特定于源的方法中该做什么。
我对面向对象编程中不同概念的命名有疑问。
不试图通过一般方式解释它,让我用我所说的不同概念的两个例子来说明它。
我认为说明这一点的一个好方法是如何处理游戏中的伤害免疫。让我们谈谈会损坏走在里面的实体的火。举例来说,假设有对火免疫的精灵,那么他们走到那里应该不会受到伤害。
有两种方法可以处理这种示例情况(实际上是三种,但一种不是很好'useful'。我会在最后说明它是什么)。
首先,实体 class 包含一个名为 isImmuneToFire 的布尔值 method/attribute,Fire class 中负责处理破坏过程的方法正在检查它。如果此布尔值为真,则直接 return 方法,否则,调用实体中的方法 damageBy(amount, source) class.
其次,Fire内部的伤害处理方法只是调用damageBy(amount, source)。与免疫有关的一切都只是在实体 classes 的方法的单独实现中处理。这更像是将实际的、重复的免疫处理工作委托给负责的 classes,同时给予他们更准确的控制(例如,某些实体在被击中一次后可以免疫 5 秒的火焰伤害,或者玩家可以穿防火盔甲等)
我希望我能很好地说明它。这两个不同的概念有名字吗,还是它们太'marginal' 没有名字?
提到的第三个概念是暴力检查损坏处理方法中的对象(例如 Java 中的 instanceof
)的 classes 和从而决定是否应该处理损坏。这当然是一种简单的方法,只会破坏任何动态方面和模块化。但如果有人为此命名,我当然会接受。在那之前,我将继续称它为 BFSJ Code
的概念,Brute-Force Static Jumble Code
的缩写。
如果允许我稍微调整一下你的问题,我宁愿根据双重调度来考虑这个问题。不是让损坏源检查它是否会损坏对象,或者接收 damageBy(amount, source)
消息的对象在 source
的所有可能值之间有两个开关,您可以摆脱两者中的条件逻辑让 Fire
发送消息 fireDamage(amount)
代替。这样,伤害源就不必检查对象是否对其免疫,并且对象将知道在其特定于源的方法中该做什么。