Come qualcuno che sta diventando più a suo agio lavorando in Objective-C mi piacerebbe essere in grado di incorporare più modelli di progettazione e funzionalità OOP nei miei progetti, ma fatico a implementarli come richiesto da GoF perché non è possibile creare una classe astratta. Voglio 1) evitare molte sottoclassi, 2) minimizzare l'uso di respondsToSelector
, conformsToProtocol
, ecc, 3) evitare tecniche come swizzling
il più possibile, 4) massimizzare l'incapsulamento, e 5) evitare condizionali lunghi o un sacco di typedef enum
.
Ad esempio, in un progetto recente volevo separare RestKit
(una libreria per accedere ai servizi RESTful) dalle mie sottoclassi UIViewController
. L'ho fatto incorporando un Adapter
tra i due con una classe base di ModelController
, che poteva accedere ai modelli. Ho anche creato il protocollo ModelControllerDelegate
per i miei VC da collegare. Ma ho avuto grandi difficoltà nel creare un ModelControllerDecorator
senza l'uso di una classe base astratta. Volevo essere in grado di decorare il mio ModelController
con aspetti diversi, come PaginationDecorator
, CompressionDecorator
, QueryableDecorator
e così via.
Ho sentito che usare Objective-C ++ è un modo per incorporare più funzionalità OOP, ma che ne dici di utilizzare le funzionalità standard del linguaggio Objective-C? Come sei stato in grado di incorporare pattern di progettazione GoF che utilizzano le funzionalità in stile C ++ (come virtual
classes) nei tuoi progetti?