07 Design Patterns

23
DESIGN PATTERN Talk 7 1 mercoledì 10 luglio 13

Transcript of 07 Design Patterns

Page 1: 07 Design Patterns

DESIGN PATTERNTalk 7

1

mercoledì 10 luglio 13

Page 2: 07 Design Patterns

Fallingwater, Frank Lloyd Wright, 19392

mercoledì 10 luglio 13

Page 3: 07 Design Patterns

DESIGN PATTERN

Una soluzione progettuale generale ad un problema ricorrente.

Wikipedia

Da: Christopher Alexander, 19773

mercoledì 10 luglio 13

Page 4: 07 Design Patterns

DESIGN PATTERN

•Non sono algoritmi.

• Riguardano il come combinare gli oggetti.

• Risolvono problemi ricorrenti.

•Danno un linguaggio comune.

•Aumentano la comprensibilità del codice.4

mercoledì 10 luglio 13

Page 5: 07 Design Patterns

CODE SMELL•Codice duplicato

•Metodo troppo lungo

•Classe troppo grande

• Troppi parametri

•Commenti di che?

•Nomi oscuri

•Dead code

5

mercoledì 10 luglio 13

Page 6: 07 Design Patterns

DESIGN PATTERN

Creazionali Comportamentali Strutturali6

mercoledì 10 luglio 13

Page 7: 07 Design Patterns

DESIGN PATTERN

Creazionali Comportamentali Strutturali7

mercoledì 10 luglio 13

Page 8: 07 Design Patterns

SINGLETON

•Come assicurarmi di avere una unica istanza di una certa classe?

8

mercoledì 10 luglio 13

Page 9: 07 Design Patterns

FACTORY METHOD

•Come fa una classe astratta a istanziare un oggetto senza saperne la classe concreta?

9

mercoledì 10 luglio 13

Page 10: 07 Design Patterns

PROTOTYPE

•Come istanziare oggetti della stessa classe di un altro, senza avere dipendenze sulla sua classe?

• La PrototypeFactory ha al suo interno dei prototipi.

• I prototipi implementano clone().

• La PrototypeFactory crea i nuovi oggetti per nome, clonando il prototipo con quel nome.

10

mercoledì 10 luglio 13

Page 11: 07 Design Patterns

STRATEGY

•Come cambio il comportamento di un oggetto, dato che non posso cambiargli la classe?

11

mercoledì 10 luglio 13

Page 12: 07 Design Patterns

STATE

•Come cambio in modo sicuro il comportamento di un oggetto al variare del suo stato interno?

12

mercoledì 10 luglio 13

Page 13: 07 Design Patterns

OBSERVERO LISTENER

•Come posso far cambiare lo stato di tanti oggetti quando un certo oggetto cambia stato?

13

mercoledì 10 luglio 13

Page 14: 07 Design Patterns

ITERATOR

•Come posso iterare tra tutti gli elementi di una collezione senza sapere come è fatta la collezione?

•Come posso iterare tra tutti gli elementi di una collezione senza averli a priori?

14

mercoledì 10 luglio 13

Page 15: 07 Design Patterns

ADAPTER

•Come permetto a due classi di scambiarsi messaggi, se il client non conosce l’interfaccia del server (o se non la può usare)?

15

mercoledì 10 luglio 13

Page 16: 07 Design Patterns

DECORATOR

•Come estendo il comportamento di un oggetto, senza estendere la sua classe?

16

mercoledì 10 luglio 13

Page 17: 07 Design Patterns

•Singleton

• Factory Method

•Prototype

•Strategy

•State

•Observer

• Iterator

•Adapter

•Decorator

mercoledì 10 luglio 13

Page 18: 07 Design Patterns

SIMPLETON

•Pattern sovracomplicato per la soluzione di problemi sempici.

•Utile per misurare la competenza degli sviluppatori.

18

mercoledì 10 luglio 13

Page 19: 07 Design Patterns

FALLACY METHOD

•Metodo ignoto che funziona, la cui esistenza diventa evidente all’occorrenza di casi particolari.

19

mercoledì 10 luglio 13

Page 20: 07 Design Patterns

PROTOTRY

•Tentativo quick & dirty: l’impegno è di riscriverlo appena trovata una soluzione migliore. Mai.

20

mercoledì 10 luglio 13

Page 21: 07 Design Patterns

ADOPTER

•È la casa dei metodi orfani. Diventa una grande classe non mantenibile che contiene di tutto e di più.

21

mercoledì 10 luglio 13

Page 22: 07 Design Patterns

DETONATOR

•Molto comune ma difficile da rilevare.

•Esempio: calcoli degli anni a 2 cifre.

•Prima o poi scoppierà.

22

mercoledì 10 luglio 13

Page 23: 07 Design Patterns

WORKFLOW E STRUMENTI WEB

Prossima puntata:

mercoledì 10 luglio 13