Questa è considerata un'implementazione del modello di progettazione del metodo Template? [chiuso]

2

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:

  1. Per ogni stringa:

    1.1. Verifica se valido. (implementato dalle sottoclassi) .

    1.2. Se non valido, rimuovi dall'elenco.

  2. 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?

    
posta Aviv Cohn 25.05.2014 - 15:52
fonte

1 risposta

0

Questo è il modello del metodo del modello. In questo esempio, la composizione dovrebbe essere preferita rispetto all'ereditarietà; usa il modello di strategia.

Non rendere astratto il tuo StringBank, ma assegnargli una funzione di filtro del validatore di stringhe come parametro.

    
risposta data 05.08.2015 - 19:53
fonte

Leggi altre domande sui tag