Ho scritto un programma con Java che riproduce musica semplice. Attualmente gli accordi hanno solo un modo ("strumming pattern") per essere riprodotti. Voglio espandere questo e creare diversi "schemi di strimpellatura" che gli accordi possono usare per suonare i loro appunti.
La classe Chord
ha un metodo play()
responsabile della riproduzione dell'accordo. Attualmente contiene la logica per l'unico "modello di strimpellio" di come vengono suonate le note.
Per aggiungere nuovi pattern di strumming, l'approccio più semplice è quello di cambiare play()
in qualcosa del genere:
void play(int strummingStyle){
if(strummingStyle == REGULAR_STYLE) playRegular();
if(strummingStyle == SOMETHING_ELSE_STYLE) playSomethingElse();
// .. etc
}
Avere un metodo per ogni stile di strumming e parametrizzare il metodo per suonare uno stile specifico.
Tuttavia l'uso del modello di strategia sembra un approccio migliore. Quello che intendo è incapsulare ogni pattern di strumming in una sottoclasse di StrummingPattern
e impostare Chord
su uno specifico modello di strumming: chord.setStrummingPattern(StrummingPattern pattern);
.
play()
quindi delegherebbe semplicemente allo schema strumming in questo modo:
void play(){
pattern.play();
}
Mentre questo sembra come il migliore, più approccio OO - trovo che non riesco a spiegarmi quali sono i reali benefici. Ed è importante per me capire veramente perché sto facendo qualcosa.
Spiega perché usare lo schema della strategia in un caso come questo è un approccio migliore del più ingenuo approccio di un metodo che rappresenta un comportamento. Quali sono esattamente i vantaggi del modello di strategia in questo tipo di situazione? Perché dovrei usarlo?