我正在使用SQL Server中的数据库在JAVA SE中开发应用程序。
在这个应用程序中,我将有三种图像:
所有图片具有以下属性:
imageID - int
imageDescription - String
image - ImageIcon
因此,拳头援助和EPIs图像需要这个属性:
isUsedInRiskAssessment - boolean
我的问题:实施这种结构的最佳方法是什么?
继承:(链接中的图片)
http://img194.imageshack.us/img194/6871/inheritance.png
我知道继承很多次被称为'邪恶',但在这种情况下似乎是一个有效的选项,除了拥有一个没有任何其他属性的子类。
分隔的课程 http://img580.imageshack.us/img580/511/separated.png
还是其他?
在我的业务层,我希望能够将所有图像(无论哪种类型)返回到GUI。
我还想要一个班级Image
和另一个名为ImageType
的班级。但在这种情况下,当Image
危险符号时,ImageType
会有一个未使用的属性 - isUsedInRiskAssessment
。
这也会影响我在数据库中创建表的方式。
希望我已经清楚地解释了自己。感谢。
答案 0 :(得分:1)
在这种情况下,继承是如何实现这一点的好方法。但我认为用这样的isUsedInRiskAssessment
创建一个子类会很好:
class Image {
private int imageId;
private String imageDescription;
private ImageIcon image;
...
}
// I can't come up with a proper name right now
class ImageChild extends Image {
private boolean isUsedInRiskAssessment;
...
}
Image firstAidImage = new ImageChild();
Image epiImage = new ImageChild();
Image dangerImage = new Image();
你真的想避免编写完全相同但只有不同名称的类 - 所以第二个选项是 evil 。
答案 1 :(得分:0)
我会创建一个实现接口AbstractImage
的类IImage
。对于声明字段,仅使用接口。我会为FirstAidImage
和EPIImage
创建一个扩展类。如果您确实需要区分两者,请实现ImageType
枚举,但不要实现完全相同的不同类。对于DangerImage
,创建一个扩展AbstractImage
的类并提供其他属性。
答案 2 :(得分:-2)
这里的继承并不差。但有时候有必要编写确定实际类型并进行转换的代码, - 你不会喜欢你会得到的代码。
这就是我建议有时使用Boolean
属性的原因。实际上,您需要三个值:true
,false
和null
。但请确保在文档中提到null值的含义。