4. Design Pattern
4
Cosa sono!
• Soluzioni riusabili per problemi comuni nel
design del software!
• Template che permettono di definire un codice
pulito, semplice!
• Basati su Best Practices!
• Nei linguaggi ad oggetti definiscono relazioni
ed interazioni tra oggetti!
• Esistono varie tipologie di design pattern
6. Design Pattern
Model-View-Controller !
• Design Pattern per eccellenza!
• Si adatta a molteplici contesti!
• Classifica gli oggetti e spinge verso la
separazione del codice in base a dei ruoli!
✓Model!
✓View!
✓Controller
6
7. Design Pattern
Model!
• Oggetto che definisce il dato nel
software !
• Descrive come manipolare il dato!
• Es. !
✓ Album!
✓Documento
7
8. Design Pattern
8
View!
• Oggetto che definisce la visualizzazione
del dato !
• Definisce come l’utente può interagire
con il dato!
• Es. !
✓ AlbumView!
✓DocumentoView
9. Design Pattern
9
Controller!
• Coordinatore !
• Interagisce con il Model per ricevere le
informazioni!
• Interagisce con View per definirne la
visualizzazione!
• Es. !
✓ AlbumViewController!
✓DocumentoViewcontroller
11. Design Pattern
Model-View-Controller !
• Il Model notifica al Controller le
variazioni del dato!
• Il Controller aggiorna il Model in base
ai cambiamenti recepiti dal Controller
a partire dalla View !
• L’utente esegue delle azioni sulla
11
View
13. Design Pattern
Singleton!
• Design Pattern che assicura l’esistenza
di una solo istanza della classe!
• Fornisce un punto di accesso globale
all’oggetto!
• Usato, ad esempio, per gestire uno
strato “light” di cache applicativa o il
client a REST API
13
14. Design Pattern
14
Singleton Objects!
• Alcuni metodi che restituiscono Singleton!
✓[NSUserDefaults
standardUserDefaults]!
✓[UIApplication
sharedApplication]!
✓[NSFileManager
defaultManager]
15. Design Pattern
Singleton!
• In Objective-C è buona norma creare Singleton e registrare il
metodo di classe sharedInstance!
!
+ (instancetype)sharedInstance {!
static id instance;!
static dispatch_once_t onceToken;!
dispatch_once(&onceToken, ^{!
instance = [[self alloc] init];!
15
});!
return instance;!
}
16. Design Pattern
16
Singleton!
• sharedInstance assicura che vi sia una sola
istanza della classe!
• Controllo eseguito attraverso il blocco di codice
dispatch_once!
• Accedo all’istanza condivisa includendo la
classe con la direttiva #import ed utilizzando!
✓[SingletonClass sharedInstance]
19. Design Pattern
19
Delegation!
• Design Pattern che “sfrutta” un altro
oggetto per agire per conto di un oggetto!
• Le operazioni da compiere vengono
delegate ad un altro oggetto!
• Utilizzato per mantenere
l’implementazione di specifici
comportamenti alla classe di destinazione
20. Design Pattern
20
Delegation!
• È il pattern per eccellenza su iOS!
• iOS è ricco di classi che sfruttano il Delegation
Pattern!
✓UITableView!
✓UIScrollView!
✓UITextField!
✓UITextView!
✓UIAlertView!
✓....
21. Design Pattern
21
Delegation!
• La classe UITableView, sfrutta il delegate
UITableViewDelegate!
• Il delegate si occupa di configurare i
parametri dell’oggetto!
• La classe che contiene la UITableView sarà
conforme al delegate UITableViewDelegate
22. Design Pattern
Delegation!
• Esiste anche il DataSource !
• Usato per configurare la sorgente dati
della classe!
• UITableView utilizza
UITableViewDataSource per
configurare il numero di rows, sections,
dimensione delle celle ed altro
22
25. Design Pattern
25
Notification!
• Molto usato in iOS!
• Permette di inviare delle notifiche ad N
osservatori!
• Modello broadcast: lo stesso messaggio viene
spedito a chi è in ascolto!
• Non è necessario per il notificatore sapere chi
sono gli osservatori!
• Gli osservatori gestiranno singolarmente la
manipolazione dati a seguito della ricezione
dell’evento
26. Design Pattern
Notification!
• Strumento potente!
• Riduce la dipendenza, in senso
stretto, tra gli oggetti!
• Le notifiche vengono gestite da iOS in
modo automatico attraverso l’oggetto
NSNotificationCenter
26
28. Design Pattern
28
Notification!
• Per registrare un osservatore è necessario
richiamare il metodo
[[NSNotificationCenter
defaultCenter] addObserver:
selector:name:object:]; !
• Specificare in selector, il metodo che gestirà la
ricezione della notifica!
• Rimuove l’osservatore quando viene
deallocata la classe o non vogliamo più
ricevere notifiche sull’osservatore