Design Patterns Luca Lista L Lista Design Patterns

  • Slides: 12
Download presentation
Design Patterns Luca Lista L. Lista

Design Patterns Luca Lista L. Lista

Design Patterns E. Gamma et al. , Design Patterns “Elementi di software OO riutilizzabile”

Design Patterns E. Gamma et al. , Design Patterns “Elementi di software OO riutilizzabile” • Piccoli insiemi di classi che collaborano implementando dei comportamenti tipici – Creational patterns – Structural patterns – Behavioral patterns Alcuni pattern classici stanno diventanto obsoleti grazie al supporto dei Template L. Lista

Factory I client possono richiedere la creazione di un prodotto senza dipendervi. La Factory

Factory I client possono richiedere la creazione di un prodotto senza dipendervi. La Factory dipende dai prodotti concreti, mentre i client dipendono solo Abstract. Product. L. Lista

Singleton user_code() { Singleton: : instance()->specific. Service(. . . ); } Il Singleton pattern

Singleton user_code() { Singleton: : instance()->specific. Service(. . . ); } Il Singleton pattern piò essere usato ogni volta che una classe deve essere instanziata una sola volta, e viene usata da diversi oggetti. Per evitare istanziazione accidentale, il constructor deve essere privato. Più istanze, ma in numero ben determinato, possono esistere (multiton) Siccome vengono usate funzioni statiche, l’ereditarietà non può essere applicata. L. Lista

Proxy Una richiesta da un client a un server, può essere mediata dal Proxy,

Proxy Una richiesta da un client a un server, può essere mediata dal Proxy, che può compiere anche altre operazioni (I/O, caching, etc. ) L. Lista

Composite Il client può trattare componenti e compositi usando la stessa interfaccia. La composizione

Composite Il client può trattare componenti e compositi usando la stessa interfaccia. La composizione può essere ricorsiva. Esempio: programmi di grafica vettoriale L. Lista

Composite Shape Client Il client può trattare componenti e compositi usando la stessa interfaccia.

Composite Shape Client Il client può trattare componenti e compositi usando la stessa interfaccia. La composizione può essere ricorsiva. Shape draw( ) 1. . * _children Gruppo draw( ) Cerchio, Rettangolo, . . . draw( ) Esempio: programmi di grafica vettoriale for c in all _children c->draw(); L. Lista

Strategy Il pattern Strategy permette di scegliere l’algoritmo da eseguire a run-time. Nuovi algoritmo

Strategy Il pattern Strategy permette di scegliere l’algoritmo da eseguire a run-time. Nuovi algoritmo possono essere introdotti senza modificare i client. L. Lista

Observer Lo stato dell’Observer dipende dallo stato del Subject. Il Subject notifica a tutti

Observer Lo stato dell’Observer dipende dallo stato del Subject. Il Subject notifica a tutti gli Observer registrati che il suo stato è cambiato. L. Lista

Template Method Un Template Method è un modo di garantire un comportamento comune. Le

Template Method Un Template Method è un modo di garantire un comportamento comune. Le operazioni elementari sono delegate alle sottoclassi. L. Lista

Visitor Permette di aggiungere nuove operazioni a Element senza modificarne l’interfaccia. Per aggiungere nuovi

Visitor Permette di aggiungere nuove operazioni a Element senza modificarne l’interfaccia. Per aggiungere nuovi Concrete. Element, bisogna modificare tutti i Visitors. L. Lista

Visitor main Visitor calcola. Cerchio (const Cerchio&) : double calcola. Rettangolo (const Rettangolo&) :

Visitor main Visitor calcola. Cerchio (const Cerchio&) : double calcola. Rettangolo (const Rettangolo&) : double Shape accept (Visitor&) const : double Area Perimetro calcola. Cerchio (const Cerchio&) : double calcola. Cerchio (const Cerchio&) : d calcola. Rettangolo (const Rettangolo&) : doublecalcola. Rettangolo (const Rettangolo Cerchio accept (Visitor& v) const : double v. calcola. Rettangolo(*this) v. calcola. Cerchio(*this) L. Lista