Sto provando a scrivere un'utilità che attraversa un elenco di file e cerca una stringa in ogni file. Trovando la stringa in un file, la aggiungerò a un elenco e visualizzerò l'elenco. Quale modello di progettazione dovrei usare per lo stesso?
Sto provando a scrivere un'utilità che attraversa un elenco di file e cerca una stringa in ogni file. Trovando la stringa in un file, la aggiungerò a un elenco e visualizzerò l'elenco. Quale modello di progettazione dovrei usare per lo stesso?
Non dovresti.
I design pattern sono denominati, ricorrenti soluzioni a problemi ricorrenti che coinvolgono flussi di lavoro complessi, che in genere coinvolgono molte classi con relazioni sistematiche l'una con l'altra. Quello che hai qui è un compito semplice che richiede un ciclo o due e una semplice struttura di dati dell'elenco.
Chiedi di nuovo quando devi scrivere un sistema complesso con dozzine di requisiti che hanno interconnessioni complesse tra loro.
La risposta di Kilian Foth è eccellente, quindi ti preghiamo di votarla, accettarla, seguirla.
Questa risposta è semplicemente intesa a mostrare l'errore di provare a inserire i modelli di calzatura in ogni cosa.
Prima di tutto, avrai bisogno di inversione di controllo. La logica principale dell'applicazione non dovrebbe uscire da sola per accedere al filesystem e interrogare i file, dovrebbe essere passata un'interfaccia che può invocare per fare il lavoro. Quindi, dovresti avere un'interfaccia "SearchableEntity" e una classe che la implementa su file java, e dovresti avere un'interfaccia "SearchableEntityProvider" per enumerare le istanze di "SearchableEntity" e una classe che la implementa per questa particolare applicazione "attraversando un elenco di file ". Quindi, la tua logica di applicazione principale dovrebbe avere un "SearchableEntityProvider" con cui lavorare.
In alternativa, puoi utilizzare il pattern visitor, in modo che "SearchableEntityProvider" possa richiamare un'interfaccia "SearchableEntityConsumer" per ogni file e la tua applicazione potrebbe fornire un'implementazione di "SearchableEntityConsumer" che esegue ogni ricerca, e se c'è una corrispondenza , aggiunge l'entità ricercabile alla sua lista.
Quindi, ovviamente, la logica dell'applicazione principale non dovrebbe riguardare le specifiche di ricerca di stringhe, quindi è necessario nascondere le stringhe dietro un'interfaccia "SearchPattern" e tutte le specifiche della ricerca di una stringa dietro ad un'interfaccia "SearchStrategy" .
Vedi dove sta andando: ciò che potrebbe essere fatto con 30 linee di codice che si adattano in un unico schermo ora richiede 10.000 linee di codice, un documento di progettazione e un quarto della tua capacità cerebrale per mantenere solo una comprensione del tutto.
Detto questo, lasciatemi aggiungere che se questo è un compito a casa, dove l'insegnante vuole che costringa artificialmente l'uso di un modello di progettazione su un problema estremamente semplice che normalmente non richiederebbe l'uso di un design pattern, quindi il pattern visitor è probabilmente ciò che il tuo insegnante vuole vedere.
Leggi altre domande sui tag java design-patterns