Я работаю в приложении Swing более 8 лет, но оно было разработано, возможно, 20 лет назад, дизайнеры создали свои собственные компоненты (я думаю, что изначально с использованием AWT, но на каком-то этапе оно было обновлено до Swing).
Существует виджет, используемый на нескольких экранах, который представляет данные в стиле диаграммы Ганта, который позволяет взаимодействовать с пользователем, перетаскивать и оставлять его среди прочего.Упрощенное описание этого дизайна приведено ниже:
//Many lines of implementation code and only 1 constructor
public class GanttChartImplementation extends JPanel {
public GanttChartImplementation(String p1, Object p2, boolean p3, boolean p4){
//Implementation code
}
}
//No implementation only constructors
public class GanttChartInterface extends GanttChartImplementation {
public GanttChartInterface(String p1, Object p2, boolean p3, boolean p4) {
super(p1,p2,p3,p4);
}
public GanttChartInterface(String p1, Object p2, boolean p3) {
super(p1,p2,p3,true); //defaults p4 to true as it's not passed in
}
public GanttChartInterface(String p1, Object p2) {
super(p1,p2,true,true); //defaults p3, p4 to true as these are not passed in
}
}
Все экраны в приложении будут расширять GanttChartInterface, первое его очевидное использование - скрыть класс реализации от экранов, использующих виджет Диаграмма Ганта.Даже в теории GanttChartInterface может быть изменен для расширения другого класса реализации без необходимости менять экраны, которые используют виджет Диаграмма Ганта.
Еще одно преимущество этого дизайна, которое я обнаружил на протяжении многих лет, заключается в том, что при добавлении нового параметра в конструктор в классе GanttChartImplementation экраны, использующие виджет, изменять не нужно, поскольку они требуются толькоизменить существующие конструкторы в GanttChartInterface, чтобы они установили новое значение параметра по умолчанию, а затем создадут новый конструктор, например, как показано ниже:
//Add new parameter to constructor used to have 4 now 5
public class GanttChartImplementation extends JPanel {
public GanttChartImplementation(String p1, Object p2, boolean p3, boolean p4, boolean p5){
//Implementation code
}
}
Нужно только изменить GanttChartInterface, чтобы он компилировался, и нетМне нужно изменить любой из уже существующих экранов, использующих виджет:
//No implementation only constructors had 3 constructors now has 4
public class GanttChartInterface extends GanttChartImplementation {
//Create new constructor that receives the new parameter
public GanttChartInterface(String p1, Object p2, boolean p3, boolean p4, boolean p5) {
super(p1,p2,p3,p4,p5);
}
public GanttChartInterface(String p1, Object p2, boolean p3, boolean p4) {
super(p1,p2,p3,p4,true); //defaults p5 to true as it's not passed in
}
public GanttChartInterface(String p1, Object p2, boolean p3) {
super(p1,p2,p3,true,true); //defaults p4, p5 to true as these are not passed in
}
public GanttChartInterface(String p1, Object p2) {
super(p1,p2,true,true,true); //defaults p3, p4, p5 to true as these are not passed in
}
}
Я просмотрел множество статей в Интернете и ТАК вопросы, и это не похоже на шаблон проектирования GoF и убежище 'где-нибудь найти, если это широко распространенный шаблон дизайна или нет?Я пытаюсь найти информацию, поскольку я хотел бы знать, кто придумал этот дизайн.Заранее благодарю за любую помощь.