我对如何为以下场景定义类和接口层次结构感到困惑。
以下是接口
public interface Save {
public void save(List<Object> pojoList);
public void save(String query);
}
public interface Update {
public void update(List<Object> pojoList, List<String> conditionList);
public void update(String query);
}
public interface Delete {
public void delete(String query);
}
以下是课程:
Class DbOperations {
}
class SaveOperation extends DbOperations implements Save {
}
class UpdateOperation extends DbOperations implements Update {
}
所以我担心的是:
我想使用DbOperations实例(基类)调用SaveOperation,DeleteOpration类方法
你能告诉我哪个班级应该是哪个界面吗?
对上述层次结构的任何修改??
提前致谢
答案 0 :(得分:0)
关于你的担忧,
我想使用实例调用SaveOperation,DeleteOpration类方法 DbOperations(基类)
我想,它会是这样的:
DbOperations op = new SaveOperation(/*Params*/);
// Check type to cast
if(op instanceof Save)
{
// Cast to Save and call method
((Save)op).save(/*Params*/);
}
// For delete
if(op instanceof Delete)
{
// Cast to Save and call method
((Delete)op).delete(/*Params*/);
}
所以,你不需要任何修改。
答案 1 :(得分:0)
通过使用多个类实现的接口,您可以定义一个方法,该接口将接口作为参数并调用其中一个方法,然后该调用的结果将取决于该接口的实际类型运行时。
那就是说,我没有看到定义DbOperation的任何优势,DbOperation没有定义其类将继承的任何方法。
如果你有理由这样做(这是可能的,如果你编写的代码只是你的场景的简化),从语义的角度来看,我会发现DbOperations
更有意义层次结构的根接口,Save
,Update
和Delete
作为实际类和根之间的抽象类(或接口):
public interface DbOperation {
public String thisOperation();
}
public abstract class Save implements DbOperation {
public String thisOperation(){
return "Save";
}
public void save(List<Object> pojoList);
public void save(String query);
}
public abstract class Update implements DbOperation{
public String thisOperation(){
return "Update";
}
public void update(List<Object> pojoList, List<String> conditionList);
public void update(String query);
}
public abstract class Delete implements DbOperation {
public String thisOperation(){
return "Delete";
}
public void delete(String query);
}
class SaveOperation implements Save {
}
class UpdateOperation implements Update {
}