Есть ли способ использовать шаблон построителя в абстрактном классе? - PullRequest
0 голосов
/ 07 июня 2018

Допустим, я пытался представить фигуры прямоугольными и овальными, с гибкостью, чтобы в конечном итоге добавить больше фигур.Поэтому я пишу абстрактный класс AShape.В этом абстрактном классе я также хочу абстрагировать сеттеры полей, такие как цвет, ширина, высота и положение.

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

1 Ответ

0 голосов
/ 26 июня 2018

Конечно, вы можете и, как вы говорите, сделать код более читабельным и с меньшим количеством повторений:

public abstract class AShape {

    private final String color;

    private final int width;

    private final int height;

    private final int position;

    public AShape(String color, int width, int height, int position) {
        this.color = color;
        this.width = width;
        this.height = height;
        this.position = position;
    }

    public String getColor() {
        return this.color;
    }

    public int getWidth() {
        return this.width;
    }

    public int getHeight() {
        return this.height;
    }

    public int getPosition() {
        return this.position;
    }
}

public class Rectangle extends AShape {

    private final int l1;

    private final int l2;

    public Rectangle(String color, int width, int height, int position, int l1, int l2) {
        **super(color, width, height, position);**
        this.l1 = l1;
        this.l2 = l2;
    }

    public int getL1() {
        return this.l1;
    }

    public int getL2() {
        return this.l2;
    }
}

Как видите, вы можете использовать конструктор в дочернем классе, хотя вы никогда не сможете создать экземплярТак как это абстрактно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...