ios-02-Паттерны ООП
DESCRIPTION
Noveo iOS school. Lecture 2.TRANSCRIPT
iOS Internship 2014Основы паттернов ООП
(продолжение лекции 1)
Лекция 1 (продолжение)● MVC● Delegate● Observer● Singleton● …
… красивые названия для обыденных вещей
Model-View-Controller
Model
● Хранение данных
● Бизнес-логика
● Может иметь разные представления
● Может "общаться" с другой моделью
View
● То, что видит пользователь
● Переиспользуется для разных данных
Controller
● Соединяет объекты-модели с объектами-видами
● Бизнес-логика
● Управляет жизненным циклом приложения
● Обрабатывает действия пользователя
Основы паттернов ООП
Model
кастомные классы с данными
...
NSArray
NSDictionary
NSString
...
NSURLConnection
CLLocationManager
...
View
UIView
UILabel
UITextField
UIButton
UISwitch
UIToolbar
UITableView
UIImageView
...
Controller
UIApplicationDelegate
UIViewController
UINavigationController
UITabBarController
...
Для нашего клиентского кода это модель.
Сами для себя эти классы — система, имеющая свою модель и контроллер на более низком уровне абстракции.
Model-View-Controller
Основы паттернов ООП
ModelAddressBook
Коллекция записей о людях
Person
Запись об одном человеке
ViewTableView
Показывает список ячеек
TableViewCell
Показывает одну ячейку с текстом
Controller
?
Model-View-Controller
Основы паттернов ООП
ModelAddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
ViewTableView
?
TableViewCell
Label *title
Label *subtitle
ControllerAddressBookVC
AddressBook *book
UITableView *table
Model-View-Controller
Основы паттернов ООП
ViewTableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
ControllerAddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
ModelAddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Основы паттернов ООП
ControllerAddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
ViewTableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
ModelAddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Основы паттернов ООП
ViewTableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
ModelAddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
DelegateController
AddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
?
Основы паттернов ООП
ControllerAddressBookVC<TableDelegate,
ModelObserver>
AddressBook *book
UITableView *table
-(void)modelUpdated:(Model*)
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
ViewTableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
ModelAddressBook
-(void)addObserver:(id
<ModelObserver>)
-(void)removeObserver:(id
<ModelObserver>)
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Observer
Основы паттернов ООП
Порождающий шаблон проектирования, гарантирующий что в приложении будет единственный
экземпляр класса с глобальной точкой доступа.
MyClass *instance = [MyClass sharedInstance];
+ Не нужно заботиться, создан ли уже объект
+ Легко доступен всем
– Легко доступен всем
Singleton
Основы паттернов ООП
Singleton//Singleton.h@interface Singleton : NSObject+ (Singleton *)sharedInstance;@end //Singleton.m@implementation Singleton+ (Singleton *)sharedInstance {
static Singleton *_sharedInstance = nil;@synchronized(self) {
if (_sharedInstance == nil) {_sharedInstance = [[Singleton alloc] init];
}}return _sharedInstance;
}@end
Основы паттернов ООП
Этот метод реализации паттерна Singleton не является наилучшим, но хорошо отражает идею.
Singleton//Singleton.h@interface Singleton : NSObject+ (Singleton *)sharedInstance;@end //Singleton.m@implementation Singleton+ (Singleton *)sharedInstance {
static Singleton *_sharedInstance = nil;@synchronized(self) {
if (_sharedInstance == nil) {_sharedInstance = [[Singleton alloc] init];
}}return _sharedInstance;
}@end
Основы паттернов ООП