我对如何为以下场景定义类和接口层次结构感到困惑。
以下是接口
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 {
}
所以我担心的是:
我想调用 SaveOperation,DeleteOpration 类方法 使用 DbOperations 实例(基类)
你能告诉我哪个类应该是哪个接口吗?
对上述层次结构的任何修改??
提前致谢
通过让多个类实现接口,您可以定义一个将接口作为参数并调用其方法之一的方法,然后该调用的结果将取决于该接口在运行时的实际类型。
也就是说,我认为定义一个不定义其类将继承的任何方法的接口 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 {
}
所以关于你的关注,
我想调用保存操作,删除操作类方法使用实例 的数据库操作(基类)
我想,它会是这样的:
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*/);
}
因此,您不需要任何修改。