360 likes | 469 Views
Esercizi Design pattern. Singleton. Permette la creazione di una sola istanza della classe all’interno dell’applicazione Fornisce un metodo con cui ottenere l’istanza Il costruttore della classe non deve essere accessibile. Singleton UML. Singleton: Implementazioni.
E N D
Singleton • Permette la creazione di una sola istanzadellaclasseall’internodell’applicazione • Fornisce un metodo con cui ottenerel’istanza • Il costruttoredellaclasse non deveessereaccessibile
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • vediamo
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • ATTENZIONE: NON THREAD-SAFE
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • ATTENZIONE: NON THREAD-SAFE • SynchronizedLazySingleton • vediamo
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • ATTENZIONE: NON THREAD-SAFE • SynchronizedLazySingleton • Puòessereinefficientenelle performance
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • ATTENZIONE: NON THREAD-SAFE • SynchronizedLazySingleton • Puòessereinefficientenelle performance • EagerSingleton • Eager inizialization: creal’oggettosubito
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • ATTENZIONE: NON THREAD-SAFE • SynchronizedLazySingleton • Puòessereinefficientenelle performance • EagerSingleton • Eager inizialization: creal’oggettosubito • Puòoccuparememoriainnecessaria
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • ATTENZIONE: NON THREAD-SAFE • SynchronizedLazySingleton • Puòessereinefficientenelle performance • EagerSingleton • Eager inizialization: creal’oggettosubito • Puòoccuparememoriainnecessaria • EnumSingleton • vediamo
Singleton: Implementazioni • LazySingleton: • Crearel’istanza solo quando serve • ATTENZIONE: NON THREAD-SAFE • SynchronizedLazySingleton • Puòessereinefficientenelle performance • EagerSingleton • Eager inizialization: creal’oggettosubito • Puòoccuparememoriainnecessaria • EnumSingleton • Non puòereditare da altreclassi
Factory Method Pattern • Definisceun’interfaccia per la creazione di un oggetto. • Lascia le sottoclassideciderequalioggettiistanziare
Esercizio: Pizzerie • Progettareil software per la preparazione e ordinazione di pizze. • Installato in diverse pizzerie. • Vediamo
Abstract Factory • Fornireun’interfaccia per la creazione di famiglie di oggetticollegati. • A differenza del Factory Method, unaclassedelega la responsabilitàdellacreazione di un oggettotramitecomposizione. • Modifichiamol’esercizioprecedente. • Gestioneuniformedegliingredienti.
Adapter • Convertel’interfaccia di unaclasse in un’altracheil client siaspetta. • Permettel’interazionetraclassi con interfacceincompatibili.
Esempio: Iterator e Enumeration • Le anticheversionidelle collections in Java nonavevanol’interfacciaiteratorcon I metodi: • hasNext() • next() • remove • Esisteva solo l’interfaccia Enumeration con imetodi: • hasMoreElements() • nextElement()
Esercizio1 • Utilizzarecodicenuovoneivecchisistemi legacy. • Implementare un adapter IteratorToEnumerationAdapter da Iterator a Enumeration. • Implementare un LegacyClientcheusaIteratorToEnumerationAdapter
Esercizio 2 • Utilizzarecodice legacy neinuovisistemi • Implementare un adapter EnumerationToIteratorAdapterda Enumeration a Iterator. • Implementare un NewClientcheusaEnumerationToIteratorAdapter
Proxy • Il proxy pattern espone un oggetto in rappresentanzadi un altro. • Ne controllal’accesso: • Ad es. per motivi di sicurezza
Esercizio 3 • Aggiungereallalogicaapplicativauna cache per migliorarel’efficienzanellarispostaallerichiestedegliutenti • L’interfacciadella cache non cambia rispetto a quelladellalogicavera e propria
Note • L’utilizzo del proxy non richiedenessunamodificanel client che lo deveutilizzare • Altriesempi di proxy sono le versioniunmodifiabledelle collections • In quelcasoimetodisono re-implementati per inibire le operazioni di modifica
Decorator • Permettedi aggiungerefunzionalità ad un oggetto • Il nuovocomportamentopuò essereaggiunto a run time • Non richiede la creazione di nuovesottoclassi
Esercizio 4 • Scrivereunaapplicazione per rappresentarediversi tipi di caffè con diversiingredienti • Potremmo fare diverse sottoclassi, ma ne dovremmo fare troppe • La soluzionedellesottoclassi non permetterebbe di aggiungerenuoviingredienti a run time
Note • Un approccio simile è usatonelleclassi per l’input/output di Java: stream, writer, reader • Oltre a modificareilcomportamento è possibileancheaggiungerenuovicomportamenti • Decorator è simile a Proxy, ma permette di comporrediversicomportamenti
Strategy • Permettedi variareglialgoritmiutilizzatinell’implementazionedellaclasse • La classe base richiedeunastrategiaesterna per portare a terminecorrettamenteilsuocompito • L’abbiamovisto con l’ordinamentocherichiede la suastrategia di comparazionetraunacoppia di elementi
Esercizio • Scrivereilcodice per rappresentare un robot chepuò avere diverse strategie per gestireilsuocomportamento • Vogliamo fare sì cheicomportamentipossanocambiarementre la nostra applicazione è in esecuzione
Observer • Definisceunadipendenza 1 moltitraoggetti. • Quando un oggetto cambia stato, tuttiglioggettidipendentisononotificati e aggiornatiautomaticamente.
Esercizio: StazioneMeteo • Progettare un sistema per ilmonitoraggiodel Meteo. • Si ha a disposizionel’oggettoWeatherDatacheforniscetemperatura, umidità, pressione. • Implementaretrediversi display (condizioneattuale, previsioni, e statistiche). • Il sistemadeveessereespandibileper supportarenuovi display.