Prendi in considerazione una classe StringBank
. Questa classe contiene un elenco di stringhe e può return
sul client.
È il codice (materiale irrilevante omesso):
abstract class StringBank{
List<String> strings;
public List<String> getStrings(){
for(String string : strings){
if(!stringValid(string)){
strings.remove(string);
}
}
return strings;
}
public abstract boolean stringValid(String s);
}
Come puoi vedere, stringValid
è un metodo astratto, pensato per essere implementato dalle sottoclassi. In questo modo le sottoclassi fungono da "filtri" del banco di stringhe, filtrando le stringhe non valide (ad esempio una sottoclasse specifica può restituire false
per le stringhe che terminano con un 'a').
La mia domanda è: è considerata un'implementazione del modello di progettazione del metodo Template?
Lo scopo del metodo Template è definire i passaggi di un algoritmo in una superclasse astratta e fare in modo che le sottoclassi definiscano l'implementazione di alcuni di questi passaggi.
Di solito, il "metodo template" - dove l'algoritmo è definito, sarebbe simile a questo:
void algorithm(){
step1(); // implemented in this class
step2(); // implemented in this class
step3(); // abstract method, implemented in subclasses.
step4(); // implemented in this class
}
Tuttavia in StringBank
, l'algoritmo è molto semplice, quindi coinvolge solo una chiamata al metodo: stringValid()
. Il resto dei passaggi dell'algoritmo sono definiti nel metodo stesso (eseguendo il looping delle stringhe, rimuovendo le stringhe e restituendole).
getStrings()
in realtà non assomiglia a un "metodo modello", quindi non sono sicuro che ciò sia considerato un'implementazione del modello Metodo modello.
L'algoritmo può essere descritto come:
-
Per ogni stringa:
1.1. Verifica se valido. (implementato dalle sottoclassi) .
1.2. Se non valido, rimuovi dall'elenco.
-
Restituisci elenco di stringhe.
Definiresti l'implementazione che ho descritto come implementazione del modello di progettazione del metodo Template, anche se getStrings()
non "sembra" come un metodo di template classico?