Избежать дублирование кода на Java


Так что я работаю над проектом, и мой вопрос заключается в следующем. В нижеприведенном коде будет много дублирования кода происходит. Можно ли избежать дублирования кода в таких случаях? Что бы быть лучшей практики, чтобы избежать дублирования кода. Я надеюсь, что кто-то может мне точку в правильном направлении.

public void rechts() {
        openBarricade(veld, 1, 0);
        int x = locatie[0] / 50;
        int y = locatie[1] / 50;
        if (x < 9 && veld.getVak(x + 1, y).isLoopbaar()) {
            switch (frame) {
                case 0:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_r1.png")).getImage());
                    frame++;
                    break;
                case 1:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_r2.png")).getImage());
                    frame++;
                    break;
                case 2:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_r3.png")).getImage());
                    frame++;
                    break;
                default:
                    frame = 0;
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_r2.png")).getImage());
                    break;
            }
            lopen(UI.OBJECTBREEDTE, 0);
        }

    }

    public void links() {
        openBarricade(veld, -1, 0);
        int x = locatie[0] / 50;
        int y = locatie[1] / 50;

        if (x > 0 && veld.getVak(x - 1, y).isLoopbaar()) {
            switch (frame) {
                case 0:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_l1.png")).getImage());
                    frame++;
                    break;
                case 1:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_l2.png")).getImage());
                    frame++;
                    break;
                case 2:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_l3.png")).getImage());
                    frame++;
                    break;
                default:
                    frame = 0;
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_l2.png")).getImage());
                    break;
            }
            lopen(-UI.OBJECTBREEDTE, 0);

        }

    }

   public void omHoog() {
        openBarricade(veld, 0, -1);
        int x = locatie[0] / 50;
        int y = locatie[1] / 50;

        if (y > 0 && veld.getVak(x, y - 1).isLoopbaar()) {
            switch (frame) {
                case 0:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_u1.png")).getImage());
                    frame++;
                    break;
                case 1:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_u2.png")).getImage());
                    frame++;
                    break;
                case 2:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_u3.png")).getImage());
                    frame++;
                    break;
                default:
                    frame = 0;
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_u2.png")).getImage());
                    break;
            }
            lopen(0, -UI.OBJECTBREEDTE);

        }
    }

    public void omLaag() {
        openBarricade(veld, 0, 1);
        int x = locatie[0] / 50;
        int y = locatie[1] / 50;

        if (y < 9 && veld.getVak(x, y + 1).isLoopbaar()) {
            switch (frame) {
                case 0:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_d1.png")).getImage());
                    frame++;
                    break;
                case 1:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_d2.png")).getImage());
                    frame++;
                    break;
                case 2:
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_d3.png")).getImage());
                    frame++;
                    break;
                default:
                    frame = 0;
                    setImage(new ImageIcon(getClass().getResource("/images/speler/speler_d2.png")).getImage());
                    break;
            }

            lopen(0, UI.OBJECTBREEDTE);

        }
    }


148
0
задан 15 апреля 2018 в 05:04 Источник Поделиться
Комментарии
1 ответ

вот что я сделал:
Я сосредоточился на switch отчетность, поскольку кажется, что они почти идентичны. оказывается, они различаются в одну букву в имени ресурса. Поэтому имеет смысл создать метод, который recevies это письмо. Существует также дублирование в case положения, поэтому я заменил switch С if что отделяет default предложение от остальных:

public void commonSetImage(String spelerLetter) {
// default values
int resourceNum = 2;
String resource = String.format("/images/speler/speler_%s%d.png", spelerLetter, resourceNum);
// in case frame is between 0 to 2, set resource num according to frame
if (frame >= 0 && frame <= 2) {
resourceNum = frame + 1;
resource = String.format("/images/speler/speler_%s%d.png", spelerLetter, resourceNum);
setImage(new ImageIcon(getClass().getResource(resource)).getImage());
frame++;
} else {
frame = 0;
setImage(new ImageIcon(getClass().getResource(resource)).getImage());
}
}

теперь оригинальные методы могут использовать новый метод:

public void rechts() {
openBarricade(veld, 1, 0);
int x = locatie[0] / 50;
int y = locatie[1] / 50;
if (x < 9 && veld.getVak(x + 1, y).isLoopbaar()) {
commonSetImage("r");
lopen(UI.OBJECTBREEDTE, 0);
}
}

3
ответ дан 16 апреля 2018 в 06:04 Источник Поделиться