Class PricingStrategyFactory
PricingStrategy) appropriata.
Cosa viene fatto: Questa classe agisce come un punto centrale di decisione per determinare quale logica di calcolo del prezzo applicare a una data riga d'ordine.
Perché viene fatto: Utilizzare il pattern Factory permette di disaccoppiare la logica di business (il calcolo del totale) dalla logica di selezione dell'algoritmo. Il chiamante (es. il servizio o il controller) non deve sapere se sta trattando un articolo singolo o un pacchetto; chiede semplicemente alla factory la strategia corretta e la esegue. Questo favorisce la manutenibilità e l'estendibilità del codice (Open/Closed Principle).
-
Constructor Summary
ConstructorsConstructorDescriptionPricingStrategyFactory(PricingStrategy singleItemStrategy, PricingStrategy packageStrategy) -
Method Summary
Modifier and TypeMethodDescriptiongetStrategy(OrderLine line) Seleziona e restituisce la strategia di prezzo corretta in base al contenuto dellaOrderLine.
-
Constructor Details
-
PricingStrategyFactory
@Autowired public PricingStrategyFactory(@Qualifier("singleItemPricingStrategy") PricingStrategy singleItemStrategy, @Qualifier("packagePricingStrategy") PricingStrategy packageStrategy)
-
-
Method Details
-
getStrategy
Seleziona e restituisce la strategia di prezzo corretta in base al contenuto dellaOrderLine.Cosa succede: Il metodo ispeziona l'oggetto
OrderLinepassato come parametro.- Se la riga contiene un riferimento a un
MarketplaceItem, restituisce lasingleItemStrategy. - Se la riga contiene un riferimento a un
Pacchetto, restituisce lapackageStrategy.
Perché viene fatto: La natura dell'elemento venduto (singolo o pacchetto) determina regole di prezzo potenzialmente diverse. Centralizzando questa scelta qui, evitiamo di dover disseminare controlli
if-elseoinstanceofnel resto del codice di servizio. Assicura che venga sempre applicata la logica pertinente al tipo di dato presente.- Parameters:
line- La riga d'ordine da valutare.- Returns:
- L'istanza di
PricingStrategyidonea per la riga fornita. - Throws:
IllegalArgumentException- Se la riga d'ordine non contiene né un item né un pacchetto validi.
- Se la riga contiene un riferimento a un
-