[英]Factory Pattern - Type variables
首先,我的英語不是最好的,而且我還沒有找到我想要的東西,可能是因為我不知道如何用英語或我的母語來問Google> Java初學者!
我正在開發一個小游戲,其中使用了多種類型的“炸彈”,為此,我正在使用抽象類Bomb
和枚舉BombType
。 每種炸彈應具有自己的值,例如range
和timer
。 現在,我在商業邏輯方面苦苦掙扎,應該如何使用炸彈以及如何處理炸彈的類型。 利用它們的type
或class
更好嗎?
我有的:
public enum BombType {
// pass object or what else?
DEFAULT(new Default()),
NUKE(new Nuke());
public final int range;
public final long timer;
BombType(Bomb paramBomb) {
this.range = paramBomb.range;
this.timer = paramBomb.timer;
}
}
public abstract class Bomb {
final BombType bombType;
final int range;
final long timer;
protected Bomb(BombType paramBombType) {
this.bombType = paramBombType;
this.range = paramBombType.range;
this.timer = paramBombType.timer;
}
}
public class Default extends Bomb {
protected Default() {
super(BombType.DEFAULT);
}
}
因此,我的問題是我應該如何應對外界的各種類型的炸彈?
選項1,按類別:
public void doSomethingWithTheBomb(Bomb bomb) {
switch(bomb.bombType) {
case DEFAULT:
Default defaultBomb = (Default) bomb;
logger.log(defaultBomb.range);
logger.log(defaultBomb.timer);
{...}
break;
case NUKE:
Nuke nukeBomb = (Nuke) bomb;
logger.log(nukeBomb.range);
logger.log(nukeBomb.timer);
{...}
break;
defrault:
break;
}
}
選項2,按類型:
public void doSomethingWithTheBomb(Bomb bomb) {
logger.log(bomb.bombType.range);
logger.log(bomb.bombType.timer);
{...}
}
選項1不好,因為您重復了代碼。
選項2更好。
我將getRange()
和getTimer()
到抽象的Bomb類中,並根據obn需要做的事情,使用doSomething()
方法。 這樣,您就可以讓炸彈(無論是哪個炸彈)做點什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.