处理不同地方案件的概念

时间:2015-10-08 21:27:47

标签: oop conceptual

我对面向对象编程中不同概念的命名有疑问 不试图通过一般手段来解释它,让我用两个我所说的不同概念的例子来说明它。

我认为说明这一点的好方法是如何处理游戏中的伤害免疫力。让我们谈谈火灾会损害走进它内部的实体。例如,假设有烈酒免受火灾影响,因此在行走时不应受到伤害。

有两种方法可以处理这种情况(实际上,有三种方法,但有一种方法非常有用'。我将在最后说明它是什么。)

首先,Entity类包含一个名为isImmuneToFire的布尔方法/属性,负责处理损坏过程的Fire类中的方法是检查它。如果此布尔值为true,则返回该方法,否则,在实体类中调用方法damageBy(amount,source)。

其次,Fire内部的伤害处理方法只是调用damageBy(amount,source)。关于免疫力的一切都只是在实体类的方法的单独实现中处理。它更像是将免疫处理的实际重复性工作委托给负责任的班级,同时给予他们更准确的控制(例如,一些实体在被击中一次后可以免受火焰伤害5秒,或者玩家可以穿着防火免疫装甲等)

我希望我能说得好。这两个不同的概念是否有名称,或者它们是否也是“边缘”的概念。得到一个?

上面提到的第三个概念是强行检查损坏处理方法中的对象(例如,用Java中的instanceof)来确定它们的类,从而决定是否应该处理损坏。这当然是一种简单的方法,只会破坏任何动态方面和模块化。但如果某人有这个名字,我当然会接受它。在那之前,我将继续称之为BFSJ Code的概念,Brute-Force Static Jumble Code的缩写。

1 个答案:

答案 0 :(得分:0)

如果我允许稍微调整一下你的问题,我宁愿在Double Dispatching的指导下考虑这个问题。在damageBy(amount, source)的所有可能值中,您可以摆脱条件逻辑,而不是检查损坏源是否会损坏对象,或者接收source消息的对象在所有可能的值Fire之间切换。通过fireDamage(amount)发送消息RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^/]+)/$ $1.php RewriteRule ^([^/]+)/([^/]+)/$ /$1/$2.php RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} !(\.[a-zA-Z0-9]{1,5}|/)$ RewriteRule (.*)$ /$1/ [R=301,L] RewriteCond %{HTTP_HOST} !^www.marinoswood.gr$ [NC] RewriteRule ^(.*)$ http://www.marinoswood.gr/$1 [L,R=301] RewriteCond %{HTTP_HOST} ^185\.4\.133\.44 RewriteRule (.*) http://www.marinoswood.gr/$1 [R=301,L] RewriteCond %{HTTP_USER_AGENT} libwww-perl.* RewriteRule .* ? [F,L] <IfModule mod_expires.c> ExpiresActive on ExpiresByType image/jpg "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" </IfModule> 代替地方。这样,损坏的来源就不必检查对象是否对它具有免疫力,并且对象将知道在源特定方法中该做什么。