Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Design Patterns In The Real World

Design Patterns In The Real World

Le slide del mio ultimo talk sui Design Pattern durante il Meetup di Marzo del PUG Catania.

Si tratta di alcuni case-study che mi è capitato di incontrare durante la “vita di tutti i giorni” (da sviluppatore ovviamente) e che ho trattato applicando uno dei pattern della GoF.

In particolare gli esempi all’interno delle slide parlano dei seguenti pattern:

- Adapter
- Decorator
- Factory Method
- Template Method
- Strategy

Seguirà il repository con gli esempi funzionanti

Sergio Sicari

March 25, 2020
Tweet

More Decks by Sergio Sicari

Other Decks in Programming

Transcript

  1. Design Patterns In The Real World case studies vol.1 Sergio

    Sicari Senior Backend Developer / DevOps
  2. Design Pattern “Each pattern describes a problem which occurs over

    and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.” Christopher Alexander - Architect
  3. Design Pattern • Design pattern is a general repeatable solution

    to a commonly occurring problem in software design. • A design pattern isn't a finished design that can be transformed directly into code. • It is a description or template for how to solve a problem that can be used in many different situations
  4. Adapter Pattern • Converte l'interfaccia di una classe nell’interfaccia che

    il client si aspetta. • Consente a classi con interfacce incompatibili di lavorare insieme • Permette ad un “vecchio” componente di funzionare in un “nuovo” sistema
  5. Adapter Service Scenario Devo usare un servizio di terze parti

    (api) ma voglio garantire che in futuro si posso cambiare facilmente
  6. Decorator • Permette di "attaccare" nuovi comportamenti ad un oggetto

    esistente • Il componente da decorare racchiude la responsabile dell’aggiunta della funzionalità
  7. Factory “if creating the object is a complicated job you

    can do all of the work in the factory, instead of repeating it every time you want to create a new instance”
  8. Factory Method Il metodo Factory definisce un'interfaccia per la creazione

    di oggetti, ma delega alle sottoclassi la decisione sulle classi concrete da istanziare (GoF) La classe Factory dipende da una astrazione, non da una classe concreta (questa è la differenza sostanziale rispetto a Simple Factory).
  9. Simple Factory • Spesso viene erroneamente confuso per il Factory

    Method. • “Rompe” il principio DIP (Dependency Inversion Principle) di SOLID
  10. Factory Method Scenario • Voglio processare un contenuto (stringa) con

    xslt (xml transformation language). • potrei avere diverse tipologie di stringa in ingresso (html, xml, ecc ...) Spider xml html ... xslt Processor
  11. Factory Method - Implementazione II Concrete Creator • Estende la

    classe astratta • Definisce il metodo astratto • Decide quale classe concreta instanziare
  12. Template Method • Il Pattern Template Method permette alle sottoclassi

    di ridefinire alcuni step dell’algoritmo senza però cambiare la struttura dell’algoritmo • La classe base definisce l’algoritmo con dei “placeholder” e le sottoclassi derivate implementano tali placeholders
  13. Strategy Pattern • Consente di incapsulare una famiglia di algoritmi

    in modo da renderli interscambiabili rispetto al client utilizzatore, mantenendo un’interfaccia generica • La complessità dell’algoritmo viene nascosta al client • L’algoritmo da utilizzare può essere scelto dinamicamente
  14. Design Pattern Relationship • Strategy is like Template Method except

    in its granularity. • Template Method uses inheritance to vary part of an algorithm. Strategy uses delegation to vary the entire algorithm. • Strategy modifies the logic of individual objects. Template Method modifies the logic of an entire class. • Factory Method is a specialization of Template Method.