Differenziare metodi ereditati da classe astratta

di il
2 risposte

Differenziare metodi ereditati da classe astratta

Buongiorno a tutti, dato il seguente schema di classi mi servirebbe sapere (a livello di codice) come poter differenziare la chiamata di "createHabitat()" della classe "TropicalHabitat", da quella della classe "ArticHabitat".


public class ZooManagement{
	public Habitat newAnimalArrives(String id){
		private HabitatFactory habitat;ù
		if(id=="penguin")
			return habitat.createHabitat(id); //come faccio a dirgli quello di ArticHabitat??
		if(id=="sloth")
			return habitat.createHabitat(id); //come faccio a dirgli quello di TropicalHabitat??
	}
}

Public abstract class HabitatFactory{
	public abstract Habitat createHabitat(String id);
}

public class TropicalFactory extends HabitatFactory{
	public Habitat createHabitat(String id){}
}

public class ArticalFactory extends HabitatFactory{
	public Habitat createHabitat(String){}
}
Nel codice non so proprio in base a che id di animale si inserisce come chiamare il metodo di ArticHabitat o TropicalHabitat.
Spero il mio problema sia chiaro e grazie in anticipo per l'aiuto!

2 Risposte

  • Re: Differenziare metodi ereditati da classe astratta

    Per come hai scritto il codice, quello che ti serve e' una classe HabitatFactoryFactory: che crea una HabitatFactory con cui creare un Habitat.
    E nella HabitatFactoryFactory (in cui ci sara' un metodo createHabitatFactory) devi indicare quale tipo di Factory creare, e questo lo fara in base all'id dell'animale.

    In qualche modo, dall'id devi capire che tipo di abitat e' associato, quindi creare la factory corrispondente.
  • Re: Differenziare metodi ereditati da classe astratta

    Ah ok pensavo di doverlo fare così ma non ero sicuro.
    Grazie mille per l'aiuto!
Devi accedere o registrarti per scrivere nel forum
2 risposte