Giuso ha scritto:
Si è pseudo codice, nel senso che non mi viene dato il contesto specifico, ma solo da fare del Refactoring per eliminare quei if statements. Le tue stesse domande sinceramente me le son chieste anch'io, per questo mi risulta difficile capire cosa fare. Non mi serve un codice preciso comunque. Non so se sono nella sezione giusta per parlare di design pattern in Java, ma credo ne vada usato uno (forse abstract factory)
Abstract-factory no, non credo. Si usa quando si vuole astrarre la creazione di "famiglie" di oggetti correlati/dipendenti tra di loro.
Potrebbe forse bastare un metodo statico di "factory" ma senza una visione più chiara del contesto è difficile valutare.
Se la scelta di quale logger creare dipende da una
variabile (quel
log, appunto) di tipo intero, stringa o cose del genere, allora uno switch o catena if-else-if generalmente serve.
Lo si può evitare solo facendo dei design un pochino più ampi, del tipo:
- tenere una Map in cui la chiave è quei valori 0, 1, ecc... e come valori ci sono oggetti che sono i logger stessi o oggetti che fanno da "factory" per ciascun logger
- usare come tipo di selezione una enum (che può avere un comportamento specifico per ciascuna costante), così se si riceve uno dei suoi valori si può ottenere quel suo specifico logger
- fare cose più articolate ad esempio con la "reflection", si fanno in una classe tanti metodi createLogger0(), createLogger1() ecc... e poi tramite reflection si cerca appunto il metodo a fronte del valore numerico
Robe del genere. Ma sono tutte da valutare in un contesto più concreto e chiaro.