我有一个带有许多DisplayFields的应用程序(在画布上渲染),例如text,boolean,date等。这些DisplayFields有许多共同的变量,如颜色,阴影参数,填充等。
由于这些常见值,我将BasicField定义为抽象类。
在这个抽象类中,我扩展了DisplayFieldText,DisplayFieldBoolean等。每个都是一个单独的类,其中包含特定于字段函数的其他变量。
现在我需要将所有DisplayField保存到磁盘。因此每个字段都需要保存其核心(抽象类变量)以及它自己的参数。
如何在没有大量重复代码的情况下解决这个问题?
答案 0 :(得分:0)
警告:我不确定你是如何将数据保存到磁盘的,所以这可能不适用。
我将假设你正在使用一些看起来像这样的结构保存到磁盘:
class DisplayField {
private int data;
public void saveData() {
// save data here
}
}
这是一种完全可以接受的保存数据的方法,但是当你引入父类时,它会变得很混乱:
abstract class BasicField {
public String sharedData1;
public double sharedData2;
}
class DisplayField extends BasicField {
private int data;
public void saveData() {
// save parent's data every time in every subclass!! Not fun!
// save DisplayField's private data
}
}
解决此问题的一个好方法是使用多态。由于BasicField的所有子类都需要保存它们的数据,因此可以在BasicField中定义saveData()方法,并在子类中调用它。这有很多其他的好处,例如,如果你有一个BasicField对象,你知道它将能够保存它的数据。此外,如果稍后向BasicField添加更多数据,则只需更改BasicField中的几行代码,而不是修改其所有子类。
abstract class BasicField {
public String sharedData1;
public double sharedData2;
public void saveData() {
// save sharedData1
// save sharedData2
}
}
class DisplayField extends BasicField {
private int data;
public void saveData() {
super.saveData();
// save DisplayField's private data
}
}