繁体   English   中英

如何保存从抽象类扩展的不同类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM