簡體   English   中英

工廠模式-類型變量

[英]Factory Pattern - Type variables

首先,我的英語不是最好的,而且我還沒有找到我想要的東西,可能是因為我不知道如何用英語或我的母語來問Google> Java初學者!

我正在開發一個小游戲,其中使用了多種類型的“炸彈”,為此,我正在使用抽象類Bomb和枚舉BombType 每種炸彈應具有自己的值,例如rangetimer 現在,我在商業邏輯方面苦苦掙扎,應該如何使用炸彈以及如何處理炸彈的類型。 利用它們的typeclass更好嗎?

我有的:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM