Sto prendendo lezioni di disegno a scuola e ho letto alcuni capitoli di Head First Design Patterns. Quello che mi piacerebbe scoprire è fino a che punto i pattern di progettazione possono impedire la riscrittura del codice esistente.Fino a che punto è possibile impedire la modifica del codice esistente quando si utilizzano gli schemi di progettazione?
Prendiamo ad esempio le classi Duck
e le classi FlyBehavior
. Ho in public static void main(String[] args)
il seguente codice:
Duck mallard = new MallardDuck(new FlyWithWings());
ho ragione nel dire che è inevitabile che si dovrà modificare il metodo di main()
quando si desidera aggiungere una nuova strategia? In questo modo, è che modifica il codice esistente, giusto? Mi riferisco in particolare alla parte in cui si parla di una classe strategia concreta: new FlyWithWings().
Se implementato il metodo modello di fabbrica nel codice, si potrebbe evitare di dover una classe concreta (FlyWithWings
) da essere menzionato affatto:
public FlyBehavior returnBehavior(FlyBehaviorFactory factory, String behaviorType) {
return factory.getFlyBehavior(behaviorType);
}
E così, hanno la seguente riga di codice:
Duck mallard = new MallardDuck(returnBehavior(flyFactory, "wings"));
in questo modo, una certa parte del vostro programma non ha bisogno di sapere su che cosa FlyBehaviorFactory da usare. Tuttavia, il tuo metodo main()
dovrà ancora specificare alcuni parametri nel metodo returnBehavior per sapere quale factory creerà quale strategia. Quindi, ho ragione nel dire che dovrai ancora modificare main()
se ho aggiunto una nuova classe FlyBehavior e volevo aggiungerla come parametro a returnBehavior()
?
Si può migliorare ulteriormente questa situazione?
Si dovrebbe dare un'occhiata a [_dependency injection_] (http://en.wikipedia.org/wiki/Dependency_injection) e ai vari framework per esso. – Seelenvirtuose
@Synchro Si prega di leggere: [Cosa devo fare quando qualcuno risponde alla mia domanda] (http://stackoverflow.com/help/someone-answers) – CKing