class Entity {
// various fields and methods
}
class MobileEntity extends Entity {
// various fields and methods
}
interface Consumer {
public void consume(final Consumable c);
}
interface Consumable {
public void onConsume(final Consumer c);
}
class Player extends MobileEntity implements Consumer {
// Override methods, etc
// Can consume
}
class Npc extends MobileEntity {
// Cannot consume anything
}
class Food implements Consumable {
public void onConsume(final Consumer c) {
if (c instanceof Player) {
healPlayer();
removeFood(1);
}
}
}
不好意思把所有的代码都放在第一位,但我觉得这对我来说更容易解释,并且让你明白你是否看到它。这是我正在开发的一款游戏。我遇到的问题是如何在不使用运算符的情况下处理消耗品(不管它是食品还是饮料)。我想避免在食品类中设置具体类玩家(因为最终可能会有数百种不同类型的食品),但是在每种情况下都存在例外情况(这表明存在问题)。避免使用OOP
不是所有的实体实现都会有一个健康字段。他们可能,但即便如此,我也需要标注特定的一些如“易受攻击”,然后有一个测试
void applyDamage(int damage) {
if (attackable) {
health -= damage;
}
}
它引入了新的问题,由于硬编码的行为(的指标引入新的类)
我听说可能在类似的线程中使用Visitor模式,但我不认为它适用于当前情况。
我将消费者传递给消费品的原因是,不同的消费品对象可能需要访问消费者的不同方面。例如,食物会增加/减少健康,药水可能对玩家造成独特的影响,喝啤酒可能会使他们头晕目眩等等。所有需要由消费品(食品,药水,啤酒等)定义的东西) – Zymus 2012-08-17 02:51:39