2013-04-08 61 views
0

我有以下接口:我可以在Java类中减少这种重复发生的模式吗?

public interface Gravy { 

    public List<Giblet> getGiblets(); 
    public Giblet getGiblet(String id); 
    public int getNumGiblets(); 
    public void addGiblet(); 
    public void removeGiblet(Giblet giblet); 

    public List<Carrot> getCarrots(); 
    public Carrot getCarrot(String id); 
    public int getNumCarrots(); 
    public void addCarrot(); 
    public void removeCarrot(Carrot carrot); 

    public List<Gravy> getGravies(); 
    public Gravy getGravy(String id); 
    public int getNumGravies(); 
    public void addGravy(); 
    public void removeGravy(Gravy gravy); 

} 

正如你所看到的,我有我的Gravy重新出现的模式。 A Gravy物体可以包含内脏,胡萝卜和其他(较小)肉汁。所有这些都可以添加,删除或查询。

有两点需要注意:

  1. Carrot S和Giblet■找彼此共同的一点,但无论是从Gravy小号巨大差别。

  2. 我可能需要增加以后(因此需要一个重构)多个项目......

是否有可能减少上面的代码,使“动词”是只能写一次?

+4

使用http://docs.oracle.com/javase/tutorial/extra/generics/? – 2013-04-08 21:31:25

回答

7

这取决于你如何看待功能组。例如,如果这组功能本身可以被认为是某种东西,例如一组的成分,那么你可以做到以下几点:

public interface Ingredient<T> { 
    public List<T> getAll(); 
    public T get(String id); 
    public int size(); 
    public void add(T item); 
    public void remove(T item); 
} 

public interface Gravy { 
    public Ingredient<Giblet> getGiblets(); 
    public Ingredient<Carrot> getCarrots(); 
    public Ingredient<Gravy> getGravies(); 
} 
+0

谢谢 - 这是相当不错的。 – sdasdadas 2013-04-08 21:39:23

相关问题