2013-04-08 3 views
0

J'ai l'interface suivante:Puis-je réduire ce motif récurrent dans ma classe 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); 

} 

Comme vous pouvez le voir, j'avoir un motif récurrent dans mon Gravy. Un objet Gravy peut contenir des abats, des carottes et d'autres jus (plus petits). Tout ce qui peut être ajouté, retiré ou interrogé.

Deux choses à noter:

  1. Carrot s et Giblet s ont un peu en commun avec l'autre, mais les deux diffèrent considérablement de Gravy s.

  2. je besoin d'ajouter d'autres éléments plus tard (donc la nécessité d'un refactoring) ...

Est-il possible de réduire le code ci-dessus afin que les « verbes » sont écrits seulement une fois ?

+4

utiliser http://docs.oracle.com/javase/tutorial/extra/generics/? –

Répondre

7

Cela dépend de la façon dont vous considérez le groupe de fonctionnalités. Par exemple, si le groupe de fonctionnalités peut être considéré comme quelque chose en soi, par ex. un ensemble d'ingrédients, alors vous pouvez faire ce qui suit:

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

Merci - c'est plutôt sympa. – sdasdadas

Questions connexes