如何保存从摘要 class 扩展而来的不同 classes
How to save different classes extended from an abstract class
我有一个包含许多 DisplayField 的应用程序(在 canvas 上呈现),例如文本、布尔值、日期等。这些 DisplayField 有许多共同的变量,例如颜色、阴影参数、填充等。
由于这些共同的价值观,我将 BasicField 定义为一个抽象 class。
从这个摘要 class 我扩展了 DisplayFieldText、DisplayFieldBoolean 等。每一个都是单独的 class,带有特定于字段功能的附加变量。
现在我需要将所有 DisplayFields 保存到磁盘。所以每个字段都需要保存它的核心(抽象Class变量)以及它自己的参数。
如何避免大量重复代码?
警告:我不确定您打算如何将数据保存到磁盘,因此这可能不适用。
我假设您当前正在使用类似如下的结构保存到磁盘:
class DisplayField {
private int data;
public void saveData() {
// save data here
}
}
这是一种完全可以接受的保存数据的方式,但是当您引入父级时 class 它会变得有点混乱:
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 的所有 subclasses 都需要保存它们的数据,因此您可以在 BasicField 中定义 saveData() 方法,并在 subclasses 中调用它。这有很多其他的附带好处,例如,如果您有一个 BasicField 对象,您就知道它将能够保存其数据。此外,如果您稍后向 BasicField 添加更多数据,则只需更改 BasicField 中的几行代码,而无需修改其所有子classes.
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
}
}
我有一个包含许多 DisplayField 的应用程序(在 canvas 上呈现),例如文本、布尔值、日期等。这些 DisplayField 有许多共同的变量,例如颜色、阴影参数、填充等。
由于这些共同的价值观,我将 BasicField 定义为一个抽象 class。
从这个摘要 class 我扩展了 DisplayFieldText、DisplayFieldBoolean 等。每一个都是单独的 class,带有特定于字段功能的附加变量。
现在我需要将所有 DisplayFields 保存到磁盘。所以每个字段都需要保存它的核心(抽象Class变量)以及它自己的参数。
如何避免大量重复代码?
警告:我不确定您打算如何将数据保存到磁盘,因此这可能不适用。
我假设您当前正在使用类似如下的结构保存到磁盘:
class DisplayField {
private int data;
public void saveData() {
// save data here
}
}
这是一种完全可以接受的保存数据的方式,但是当您引入父级时 class 它会变得有点混乱:
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 的所有 subclasses 都需要保存它们的数据,因此您可以在 BasicField 中定义 saveData() 方法,并在 subclasses 中调用它。这有很多其他的附带好处,例如,如果您有一个 BasicField 对象,您就知道它将能够保存其数据。此外,如果您稍后向 BasicField 添加更多数据,则只需更改 BasicField 中的几行代码,而无需修改其所有子classes.
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
}
}