我有一个delete(object)
方法应执行不同的代码取决于哪个对象将被删除。如何应用实现依赖的方法调用?
从设计角度来看,如何避免此instanceof
检查? 我不能在我所有的实现中引入delete()
方法,因为对象不应该知道他们应该如何删除自己。
还有什么?
我有一个delete(object)
方法应执行不同的代码取决于哪个对象将被删除。如何应用实现依赖的方法调用?
从设计角度来看,如何避免此instanceof
检查? 我不能在我所有的实现中引入delete()
方法,因为对象不应该知道他们应该如何删除自己。
还有什么?
你仍然可以使用一个子类化机制(你甚至可以把它通用)写
class MyService<T> {
void delete(T obj) {
// Only the delete logic, but nothing specific for any type
}
}
然后,富,你会成为一个子类:
class MyFooService extends MyService<Foo> {
void delete(Foo obj) {
//execute some foo deletion logic
// finally, invoke super class as it knows how to do the real delete action
super.delete(obj);
}
}
这样,你的Foo
特异性的逻辑是MyFooService
和您的Foo
逻辑被放入一个单独的类。作为额外的好处,这给你可以很好地进行单元测试的类。
这非常非常整齐!认为它最适合我的需求。 – membersound
方法重载:
void delete(Foo f) {}
void delete(Bar b) {}
海事组织其更好地创造出代表DeleteType说
public enum DeleteType {
Foo, Bar //..... }
和MyService
删除方法可以采取2个参数就像一个枚举,
void delete(DeleteType type, Object object) {
switch(type) {
case Foo:
//Deletion of Foo objects....
break;
case Bar:
//Deletion of Bar objects....
break;
....
}
}
如果你想有delete
方法签名完整的,那么type
可以存储在obj
本身(通过使obj
的类遵守合同(interface
) l使它return
它的type
)
我会让它成为一个抽象方法,并让子类处理删除逻辑(类似于insert,update,retrieve,retrieveAll ...)。 –