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