接口或抽象类

时间:2011-12-01 15:50:49

标签: java

我的Java有点生疏,我确信我做错了

我需要导出一大堆不同的文件格式。所以我虽然会为每种格式创建一个类,并让它们都实现标准接口。

每个文档都有一个名称和默认文件名,但我不确定如何正确存储该数据。最初我认为它应该是具体类中的静态最终字符串,但是如何通过接口强制执行它,以便所有具体类必须提供该信息。

希望这是有道理的,这是我到目前为止所拥有的

public interface IExporter {

    public void exportToFile(String filename) throws SQLException, IOException;

    public String getDocumentName();

    public String getDefaultFilename();

}

-

public class LaneDrawCsvExporter implements IExporter {

    public void exportToFile(String filename) throws SQLException, IOException {
         // code to export document here
    }

    public String getDocumentName() {
        return "Lane Draw";
    }

    public String getDefaultFilename() {
        return "Lane Draw.CSV";
    }
}

4 个答案:

答案 0 :(得分:2)

你的方法看起来很合理。至于如何强制必须提供文档名称和默认文件名,我认为你所做的工作 - 在界面中有返回文档名称和默认文件名的方法。实现接口的所有具体类都必须实现那些甚至能够编译的方法。因此,您已强制要求具体类必须提供这些名称。我认为试图强制执行具体类有一个特别命名的静态最终字符串是一个红色的鲱鱼,因为你有这些方法可用。

答案 1 :(得分:1)

将文件信息与出口商分开。因此,您有一堆导出器,其唯一的任务是导出文件,以及一些链接到文件和右导出器的对象(可能还有一些添加构造来决定使用哪个导出器)。

答案 2 :(得分:1)

我会创建一个名为abstract的{​​{1}}类,然后提供一些(或更多)实例变量及其getter和setter方法(如name / filename)。或者所有实现类之间的共同特征。

当你创建一个扩展抽象类的新类时,只需让重载的构造函数提供你需要提供的任何参数。

这种创建某个类的过程需要你提供所需的信息,即构造函数需要它。

答案 3 :(得分:0)

如果您需要强制设置类的初始状态(文件名等),最好使用Abstract类。 以下只是为了给你一个想法(你需要重构它)

注意:由于父抽象类中没有默认(或无参数)构造函数,因此必须指定子类中使用的构造函数。

public abstract class Exporter {

    string FileName
    public Exporter ( string fileName ) {
        FileName= fileName 
    }

    public void exportToFile() ....

    public String getDocumentName()....

    public String getDefaultFilename()....

}
-

public class LaneDrawCsvExporter extends Exporter {

 public LaneDrawCsvExporter ( string fileName ) {
        super(fileName) 
    }

public void exportToFile() throws SQLException, IOException {
 // code to export document here
}

public String getDocumentName() {
    return "Lane Draw";
}

public String getDefaultFilename() {
    return "Lane Draw.CSV";
}
}