我可以在Java类中减少这种重复出现的模式吗?

时间:2013-04-08 21:30:01

标签: java design-patterns interface refactoring

我有以下界面:

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中有一个重复出现的模式。 Gravy对象可以包含内脏,胡萝卜和其他(较小的)肉食。所有这些都可以添加,删除或查询。

有两点需要注意:

  1. CarrotGiblet s彼此有一点共同点,但两者都与Gravy s有很大不同。

  2. 我可能需要稍后添加更多项目(因此需要重构)......

  3. 是否可以减少上面的代码,以便“动词”只写一次?

1 个答案:

答案 0 :(得分: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();
}