我在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,它的第一个明显用途是从使用Gantt Chart小部件的屏幕中隐藏实现类。即使从理论上讲,也可以更改GanttChartInterface以扩展不同的实现类,而不必更改使用Gantt Chart小部件的屏幕。
我多年来发现的这种设计的另一个好处是,当在GanttChartImplementation类中向构造函数添加新参数时,不需要更改使用小部件的屏幕,因为只需要修改现有的屏幕即可。 GanttChartInterface中的构造函数,因此他们将新的param值设置为默认值,然后将创建一个新的构造函数,如下例所示:
//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
}
}
我看了很多有关Web的文章以及关于SO的问题,这似乎不是GoF设计模式,而且无论这是否是广泛使用的设计模式,在任何地方都找不到吗?我想查找信息,因为我想知道谁提出了这种设计。预先感谢您的帮助。
答案 0 :(得分:1)
在OOP中,它是提供默认值的重载构造函数。
编辑 就像评论中提到的@boris一样。 您不需要使用子类来重载方法,只需在GanttChartImplementation中执行即可。这里没有继承的好处。只是不必要的课。