[英]How to save different classes extended from an abstract class
我有一个带有许多DisplayField(在画布上渲染)的应用程序,例如文本,布尔值,日期等。这些DisplayField具有许多共同的变量,例如颜色,阴影参数,填充等。
由于这些通用值,我已将BasicField定义为抽象类。
从这个抽象类中,我扩展了DisplayFieldText,DisplayFieldBoolean等。它们都是一个单独的类,具有特定于该字段功能的其他变量。
现在,我需要将所有DisplayField保存到磁盘。 因此,每个字段都需要保存其核心(抽象类变量)以及其自己的参数。
我如何在没有大量重复代码的情况下解决这个问题?
警告:我不确定您打算如何将数据保存到磁盘,因此这可能不适用。
我假设您当前正在使用某种类似于以下内容的结构保存到磁盘:
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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.