SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Lezione 22: Design
    Pattern Strutturali
       Corso di Ingegneria del Software
     Laurea Magistrale in Ing. Informatica
       Università degli Studi di Salerno



1
Outline

    ✦ Design Pattern Strutturali
     •   Adapter (class)

     •   Adapter (object)

     •   Composite

     •   Decorator

     •   Facade

     •   Proxy



2
Design Pattern Strutturali




3
Design Pattern Strutturali

    ✦ Riguardano il modo in cui più oggetti
      sono collegati tra di loro per formare
      strutture complesse
    ✦ Usano l’ereditarietà e il polimorfismo per
      comporre interfacce diverse o
      implementazioni diverse di una stessa
      interfaccia



4
Adapter (class)


    ✦ Il problema
     •   occorre utilizzare una classe già disponibile
         (Adaptee) insieme a una libreria di classi
         sviluppata in maniera indipendente; la libreria
         richiede una particolare interfaccia (Target) che
         non è presente nell’Adaptee




5
Adapter (class)


    ✦ Soluzione
     •   Si crea una nuova classe (Adapter) che
         implementa l’interfaccia Target ed eredita
         l’implementazione della classe Adaptee
     •   L’implementazione nell’Adapter dei metodi di
         Target richiama i metodi di Adaptee




6
Adapter (class)
    ✦ Esempio di struttura




7
Adapter (class)
    ✦ Conseguenze
     •   se Target non è un’interfaccia pura (“interface” in
         Java), è necessaria l’ereditarietà multipla (non
         presente in tutti i linguaggi)
     •   PROBLEMA: un Adapter adatta un singolo
         Adaptee; se c’è una gerarchia di Adaptee occorre
         realizzare una gerarchia parallela di Adapter
     •   viene creato un unico oggetto che funge sia da
         Adaptee che da Target (basso overhead a tempo
         di esecuzione)
     •   PROBLEMA: complicata la situazione in cui un
         Adaptee deve essere adattato a diversi Target
8
Adapter (object)


    ✦ Il problema
     •   occorre utilizzare una classe già disponibile
         (Adaptee) insieme a una libreria di classi sviluppata
         in maniera indipendente; la libreria richiede una
         particolare interfaccia (Target) che non è presente
         nell’Adaptee




9
Adapter (object)

     ✦ Soluzione
      •   Si crea una nuova classe (Adapter) che implementa
          l’interfaccia Target e contiene un riferimento a un
          oggetto della classe Adaptee (tipicamente passato al
          costruttore)
      •   L’implementazione nell’Adapter dei metodi di Target
          richiama i metodi dell’oggetto Adaptee




10
Adapter (object)
     ✦ Esempio di struttura




11
Adapter (object)
     ✦ Conseguenze
      •   l’Adapter può essere utilizzato per oggetti della
          classe Adaptee e di tutte le classi derivate
      •   se necessario, è possibile cambiare a run time
          l’oggetto Adaptee associato a un Adapter
      •   uno stesso oggetto Adaptee può essere associato
          a diversi Adapter per Target diversi
      •   PROBLEMA: l’Adapter e l’Adaptee rimangono due
          oggetti distinti; questo comporta un overhead di
          memoria


12
Adapter (object)
     ✦ Esempio




13
Adapter (object)

     ✦ Soluzione (variante)
      •   in linguaggi come Java, l’Adapter può essere
          realizzato come classe interna (eventualmente
          anonima) dell’Adaptee
          ‣   in questo modo l’Adapter ha accesso a tutte le componenti
              private della classe Adaptee
          ‣   potrebbe richiedere una modifica/estensione della classe
              Adaptee, quindi si tratta di una soluzione ibrida tra Class
              Adapter e Object Adapter
          ‣   si evita di aggiungere nuove classi visibili all’esterno




14
Adapter (object)

     ✦ Esempio
      •   Gestione degli eventi in Java 1.1 e successivi (es.
          ActionListener, MouseAdapter etc.)
          ‣   per associare un’azione a un evento, tipicamente si crea un
              object adapter (usando una classe anonima) che
              implementa i metodi dell’interfaccia Listener appropriata
              richiamando metodi dell’oggetto che effettivamente
              eseguirà l’azione




15
Composite

     ✦ Il problema
      •   il sistema deve gestire oggetti (Component) che
          possono essere sia oggetti semplici che oggetti
          complessi composti da più oggetti semplici
          (eventualmente in maniera gerarchica)
      •   si vuole rendere il client che usa questi oggetti
          indipendente dal fatto che stia manipolando un
          componente semplice o un oggetto composto




16
Composite

     ✦ Soluzione
      •   Si definisce una classe Composite che implementa
          l’interfaccia di Component, e mantiene al suo
          interno una collezione di Component
      •   il Composite implementa i metodi di Component
          invocando a sua volta i metodi dei componenti da
          cui è costituito




17
Composite
     ✦ Esempio di struttura




18
Composite

     ✦ Conseguenze
      •   semplifica il client (nascondendo la differenza tra
          componenti semplici e composti)
      •   rende più semplice l’aggiunta di nuovi tipi di
          componenti
      •   PROBLEMA: non è facile porre dei vincoli sulla
          composizione (es. un oggetto può contenere solo
          componenti di un certo tipo)




19
Composite
     ✦ Esempio




20
Composite


     ✦ Esempio
      •   la gerarchia di componenti grafici in AWT
          ‣   ogni componente grafico deriva da java.awt.Component
          ‣   la classe java.awt.Container definisce un Component che
              può contenere altri componenti (es. Window)




21

Weitere ähnliche Inhalte

Was ist angesagt?

Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
Nelson Firmani
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
lukebonham
 

Was ist angesagt? (20)

Design Pattern
Design PatternDesign Pattern
Design Pattern
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Corso Java 2 - AVANZATO
Corso Java 2 - AVANZATOCorso Java 2 - AVANZATO
Corso Java 2 - AVANZATO
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Java OCA teoria 1
Java OCA teoria 1Java OCA teoria 1
Java OCA teoria 1
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Corso Javascript
Corso JavascriptCorso Javascript
Corso Javascript
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Corso progettazione
Corso progettazioneCorso progettazione
Corso progettazione
 
Java OCA teoria 4
Java OCA teoria 4Java OCA teoria 4
Java OCA teoria 4
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
C# Language Evolution
C# Language EvolutionC# Language Evolution
C# Language Evolution
 
Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)Lezione design patterns 2011 (Peron)
Lezione design patterns 2011 (Peron)
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Corso Java 3 - WEB
Corso Java 3 - WEBCorso Java 3 - WEB
Corso Java 3 - WEB
 
Eclipse and Java
Eclipse and JavaEclipse and Java
Eclipse and Java
 
Java SE 5. Capitolo 01: Base
 Java SE 5. Capitolo 01: Base Java SE 5. Capitolo 01: Base
Java SE 5. Capitolo 01: Base
 

Ähnlich wie Lezione 6a: Design Pattern Strutturali

DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
Sinergia Totale
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
Sinergia Totale
 
Lezione 08 - Iterator
Lezione 08 - IteratorLezione 08 - Iterator
Lezione 08 - Iterator
Marco Bianchi
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
Andrea Saltarello
 

Ähnlich wie Lezione 6a: Design Pattern Strutturali (20)

pattern
patternpattern
pattern
 
Programmazione funzionale e Stream in Java
Programmazione funzionale e Stream in JavaProgrammazione funzionale e Stream in Java
Programmazione funzionale e Stream in Java
 
Corso Object Oriented Analysis and Design
Corso Object Oriented Analysis and DesignCorso Object Oriented Analysis and Design
Corso Object Oriented Analysis and Design
 
Vaadin7
Vaadin7Vaadin7
Vaadin7
 
OOP with C#
OOP with C#OOP with C#
OOP with C#
 
Repository pattern slides v1.1
Repository pattern slides v1.1Repository pattern slides v1.1
Repository pattern slides v1.1
 
Dependency injection: the good parts
Dependency injection:  the good partsDependency injection:  the good parts
Dependency injection: the good parts
 
Sencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codiceSencha touch: panoramica e orientamento sul codice
Sencha touch: panoramica e orientamento sul codice
 
DotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScriptDotNetToscana - Sessione TypeScript
DotNetToscana - Sessione TypeScript
 
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
 
Design patterns - parte 1
Design patterns - parte 1Design patterns - parte 1
Design patterns - parte 1
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
 
Introduzione a TypeScript
Introduzione a TypeScriptIntroduzione a TypeScript
Introduzione a TypeScript
 
Slide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScriptSlide evento Code Refactoring JavaScript
Slide evento Code Refactoring JavaScript
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
Lezione 08 - Iterator
Lezione 08 - IteratorLezione 08 - Iterator
Lezione 08 - Iterator
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Idiomatic Domain Driven Design
Idiomatic Domain Driven DesignIdiomatic Domain Driven Design
Idiomatic Domain Driven Design
 

Mehr von Andrea Della Corte

Mehr von Andrea Della Corte (10)

Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Kürzlich hochgeladen

case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
lorenzodemidio01
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
sasaselvatico
 

Kürzlich hochgeladen (17)

Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptxNicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
Nicola pisano aaaaaaaaaaaaaaaaaa(1).pptx
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
Esame di Stato 2024 - Materiale conferenza online 09 aprile 2024
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 

Lezione 6a: Design Pattern Strutturali

  • 1. Lezione 22: Design Pattern Strutturali Corso di Ingegneria del Software Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Design Pattern Strutturali • Adapter (class) • Adapter (object) • Composite • Decorator • Facade • Proxy 2
  • 4. Design Pattern Strutturali ✦ Riguardano il modo in cui più oggetti sono collegati tra di loro per formare strutture complesse ✦ Usano l’ereditarietà e il polimorfismo per comporre interfacce diverse o implementazioni diverse di una stessa interfaccia 4
  • 5. Adapter (class) ✦ Il problema • occorre utilizzare una classe già disponibile (Adaptee) insieme a una libreria di classi sviluppata in maniera indipendente; la libreria richiede una particolare interfaccia (Target) che non è presente nell’Adaptee 5
  • 6. Adapter (class) ✦ Soluzione • Si crea una nuova classe (Adapter) che implementa l’interfaccia Target ed eredita l’implementazione della classe Adaptee • L’implementazione nell’Adapter dei metodi di Target richiama i metodi di Adaptee 6
  • 7. Adapter (class) ✦ Esempio di struttura 7
  • 8. Adapter (class) ✦ Conseguenze • se Target non è un’interfaccia pura (“interface” in Java), è necessaria l’ereditarietà multipla (non presente in tutti i linguaggi) • PROBLEMA: un Adapter adatta un singolo Adaptee; se c’è una gerarchia di Adaptee occorre realizzare una gerarchia parallela di Adapter • viene creato un unico oggetto che funge sia da Adaptee che da Target (basso overhead a tempo di esecuzione) • PROBLEMA: complicata la situazione in cui un Adaptee deve essere adattato a diversi Target 8
  • 9. Adapter (object) ✦ Il problema • occorre utilizzare una classe già disponibile (Adaptee) insieme a una libreria di classi sviluppata in maniera indipendente; la libreria richiede una particolare interfaccia (Target) che non è presente nell’Adaptee 9
  • 10. Adapter (object) ✦ Soluzione • Si crea una nuova classe (Adapter) che implementa l’interfaccia Target e contiene un riferimento a un oggetto della classe Adaptee (tipicamente passato al costruttore) • L’implementazione nell’Adapter dei metodi di Target richiama i metodi dell’oggetto Adaptee 10
  • 11. Adapter (object) ✦ Esempio di struttura 11
  • 12. Adapter (object) ✦ Conseguenze • l’Adapter può essere utilizzato per oggetti della classe Adaptee e di tutte le classi derivate • se necessario, è possibile cambiare a run time l’oggetto Adaptee associato a un Adapter • uno stesso oggetto Adaptee può essere associato a diversi Adapter per Target diversi • PROBLEMA: l’Adapter e l’Adaptee rimangono due oggetti distinti; questo comporta un overhead di memoria 12
  • 13. Adapter (object) ✦ Esempio 13
  • 14. Adapter (object) ✦ Soluzione (variante) • in linguaggi come Java, l’Adapter può essere realizzato come classe interna (eventualmente anonima) dell’Adaptee ‣ in questo modo l’Adapter ha accesso a tutte le componenti private della classe Adaptee ‣ potrebbe richiedere una modifica/estensione della classe Adaptee, quindi si tratta di una soluzione ibrida tra Class Adapter e Object Adapter ‣ si evita di aggiungere nuove classi visibili all’esterno 14
  • 15. Adapter (object) ✦ Esempio • Gestione degli eventi in Java 1.1 e successivi (es. ActionListener, MouseAdapter etc.) ‣ per associare un’azione a un evento, tipicamente si crea un object adapter (usando una classe anonima) che implementa i metodi dell’interfaccia Listener appropriata richiamando metodi dell’oggetto che effettivamente eseguirà l’azione 15
  • 16. Composite ✦ Il problema • il sistema deve gestire oggetti (Component) che possono essere sia oggetti semplici che oggetti complessi composti da più oggetti semplici (eventualmente in maniera gerarchica) • si vuole rendere il client che usa questi oggetti indipendente dal fatto che stia manipolando un componente semplice o un oggetto composto 16
  • 17. Composite ✦ Soluzione • Si definisce una classe Composite che implementa l’interfaccia di Component, e mantiene al suo interno una collezione di Component • il Composite implementa i metodi di Component invocando a sua volta i metodi dei componenti da cui è costituito 17
  • 18. Composite ✦ Esempio di struttura 18
  • 19. Composite ✦ Conseguenze • semplifica il client (nascondendo la differenza tra componenti semplici e composti) • rende più semplice l’aggiunta di nuovi tipi di componenti • PROBLEMA: non è facile porre dei vincoli sulla composizione (es. un oggetto può contenere solo componenti di un certo tipo) 19
  • 20. Composite ✦ Esempio 20
  • 21. Composite ✦ Esempio • la gerarchia di componenti grafici in AWT ‣ ogni componente grafico deriva da java.awt.Component ‣ la classe java.awt.Container definisce un Component che può contenere altri componenti (es. Window) 21