Penso delle possibili criticità potrebbero essere le seguenti:
1- Una qualsiasi sottoclasse di Scrittore, potrebbe pubblicare un libro che non rientra nelle sue competenze;
2- Nel caso in cui volessimo aggiungere nuovi generi di libri, ogni volta va modificata la classe Scrittore.
Una possibile implementazione con il Factory potrebbe essere la seguente:
=== LIBRI FACTORY ===
public class LibriFactory {
public static Libro getLibro(String genere){
Libro l = null;
switch(genere){
case "AVVENTURA": l=new Avventura(); break;
case "GIALLO" : l=new Giallo(); break;
case "FUMETTO" : l = new Fumetto(); break;
default: break;
}
return l;
}
}
=== LIBRO === (Giallo, Avventura e Fumetto estendono questa classe)
public abstract class Libro {
void impagina(){};
}
=== SCRITTORE ===
public abstract class Scrittore {
protected Libro l;
public Scrittore(){}
protected Libro pubblica(){
l.impagina();
return l;
}
}
=== FUMETTISTA === (Schema uguale anche per ScrittoreGialli, ScrittoreAvventure ecc... )
public class Fumettista extends Scrittore{
public Fumettista(){
this.l = LibriFactory.getLibro("FUMETTO");
}
}
Apprezzo qualsiasi tipo di consigli.