2013-03-31 19 views
0

我有一个delete(object)方法应执行不同的代码取决于哪个对象将被删除。如何应用实现依赖的方法调用?

​​

从设计角度来看,如何避免此instanceof检查? 我不能在我所有的实现中引入delete()方法,因为对象不应该知道他们应该如何删除自己。

还有什么?

+0

我会让它成为一个抽象方法,并让子类处理删除逻辑(类似于insert,update,retrieve,retrieveAll ...)。 –

回答

5

你仍然可以使用一个子类化机制(你甚至可以把它通用)写

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逻辑被放入一个单独的类。作为额外的好处,这给你可以很好地进行单元测试的类。

+0

这非常非常整齐!认为它最适合我的需求。 – membersound

2

方法重载:

void delete(Foo f) {} 
void delete(Bar b) {} 
0

海事组织其更好地创造出代表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