Какой шаблон проектирования для создания объектов наследования? - PullRequest
4 голосов
/ 23 апреля 2020

У меня есть несколько объектов в структуре наследования, как это:

public class ImageButton extends JButton {
    private Image image;

    public ImageButton(Image i) {
        this.image = i;
    }
}

public class ColorButton extends JButton {
    private Color color;

    public ColorButton(Color c) {
        this.color = c;
    }
}

Все объекты расширяют JButton. Есть более сложные объекты, которые расширяют класс ImageButton и так далее. Я подумал использовать абстрактный шаблон фабрики, но моя проблема в том, что конструкторы принимают разные атрибуты для каждого класса.

Какой шаблон я могу использовать, чтобы реализовать хороший способ создания?

1 Ответ

5 голосов
/ 23 апреля 2020

Для этого можно использовать фабричные методы stati c. В качестве примера для вдохновения я могу привести Lists гуавы, который среди прочих фабрик определяет

  • newArrayList(E... elements) (список массивов с заданными элементами)
  • newArrayListWithCapacity(int initialArraySize) (пустой список массивов с емкостью)
  • newLinkedList() (пустой связанный список)
  • ...

Это основано на понимании того, что Вы хотите упростить создание объектов кнопок, для которых я думаю, что фабричные методы stati c хорошо подходят.

Ваш собственный код может включать такие методы, как (в том же классе или даже в интерфейсе) :

public static JButton imageButton(Image i) {
    return new ImageButton(i);
}
public static JButton colorButton(Color color) {
    return new ColorButton(color);
}
public static JButton greenButton() {
    return new ColorButton(Color.GREEN);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...