Этот код попадет в шаблон?


CustomDialog является родительский абстрактный класс для OkExclamationDialog и ExclamationDialog с абстрактным методом displayDialog() быть переопределены.

Это впасть в шаблон? Может эта конструкция быть усовершенствованы?

JudgeButton управляет другими классами.

public class JudgeButton {
    private int typeCode;

    private void initialise(){
        setTypeCode();
        if(typeCode == 0){
            c = new ExclamationDialog("Episode not started");
            c.displayDialog();
        }
        else if(typeCode == 1){
            c = new OkExclamationDialog("Episode Finished, you will now be redirected");
            c.displayDialog();
        }
    }

    private void setTypeCode(){
        wrapperJsonObject = Utils.getCurrentWrapperJsonObjectFromServer();
        jsonObject = wrapperJsonObject.getJsonObject();
        NextRatingsScreen n = new NextRatingsScreen(jsonObject);
        RatingsCountDownTime r = new RatingsCountDownTime();

        if(!n.isEpisodeStarted()){
            typeCode = 0;
        }
        else if(!n.isPerformanceStarted()){
            typeCode = 1;
        }
    }
}

public class OkExclamationDialog extends CustomDialog{
    public OkExclamationDialog(String text) {
        super(text);
    }

    public void displayDialog() {
        DialogType dialogType = new DialogType();
        DialogBuilder dialogBuilder = new DialogBuilder();
        AbstractDialogFactory abstractDialogFactory = dialogType.getDialogType(DialogEnum.EXCLAMATION_DIALOG);
        Dialog nextScreen = dialogBuilder.buildDialog(abstractDialogFactory, super.getText());
        int result = nextScreen.doModal();
        ScreenController.displayNextScreenFadeTransition(nextScreen);

        if(result==Dialog.OK)
        {
            ScreenController.displayNextScreenFadeTransition(new ContestantsScreen());
        }
    }
}

public class ExclamationDialog extends CustomDialog{
    public ExclamationDialog(String text) {
        super(text);
    }

    public void displayDialog() {
        DialogType dialogType = new DialogType();
        DialogBuilder dialogBuilder = new DialogBuilder();
        AbstractDialogFactory abstractDialogFactory = dialogType.getDialogType(DialogEnum.EXCLAMATION_DIALOG);
        Dialog nextScreen = dialogBuilder.buildDialog(abstractDialogFactory, super.getText());

        ScreenController.displayNextScreenFadeTransition(nextScreen);
    }
}

public abstract class CustomDialog {
    private String text;

    public CustomDialog(String text){
        this.text = text;
    }

    public String getText(){
        return this.text;
    }

    public abstract void displayDialog();
}


408
6
задан 2 ноября 2011 в 11:11 Источник Поделиться
Комментарии
1 ответ

В инициализации напоминает мне завод, но это точно не завод. Это нормально, если вы не используете тот же, если за elseif структуру в коде в другом месте. Если вы вытащите его на фабрику класса.

Лишь некоторые идеи:

1, рекомендуется использовать перечисления вместо целочисленного typeCode (устранить магические числа).

2, может быть, вы должны бросить IllegalStateException в конце инициализировать метод с сообщением "неверный typecode".

3, то же самое верно для setTypeCode() метод. Или задать явно typeCode для 0 в последней строке метода, Если 0 является допустимым значением. (Это подразумевается по умолчанию значение частного инт typeCode поле.)

4, я бы переименовать setTypeCode() в calculateTypeCode() , которая возвращает TypeCode перечисление. Теперь это более или менее временные связи.

5, Вы должны создать новый getNextScreen() метод в CustomDialog класса С первые четыре строки displayDialog() метод. Затем вызвать getNextScreen() от displayDialog() методы. Это сняло бы некоторые дублирования кода.

// CustomDialog class code
public Dialog createNextScreen() {
DialogType dialogType = new DialogType();
DialogBuilder dialogBuilder = new DialogBuilder();
AbstractDialogFactory abstractDialogFactory =
dialogType.getDialogType(DialogEnum.EXCLAMATION_DIALOG);
Dialog nextScreen = dialogBuilder.buildDialog(abstractDialogFactory, text);
return nextScreen;
}

// OkExclamationDialog, ExclamationDialog class code
public void displayDialog() {
Dialog nextScreen = getNextScreen();
...
ScreenController.displayNextScreenFadeTransition(nextScreen);
}

3
ответ дан 3 ноября 2011 в 07:11 Источник Поделиться