ios-02-Паттерны ООП

13
iOS Internship 2014 Основы паттернов ООП (продолжение лекции 1)

Upload: noveo

Post on 28-Jun-2015

172 views

Category:

Software


0 download

DESCRIPTION

Noveo iOS school. Lecture 2.

TRANSCRIPT

Page 1: iOS-02-Паттерны ООП

iOS Internship 2014Основы паттернов ООП

(продолжение лекции 1)

Page 2: iOS-02-Паттерны ООП

Лекция 1 (продолжение)● MVC● Delegate● Observer● Singleton● …

… красивые названия для обыденных вещей

Page 3: iOS-02-Паттерны ООП

Model-View-Controller

Model

● Хранение данных

● Бизнес-логика

● Может иметь разные представления

● Может "общаться" с другой моделью

View

● То, что видит пользователь

● Переиспользуется для разных данных

Controller

● Соединяет объекты-модели с объектами-видами

● Бизнес-логика

● Управляет жизненным циклом приложения

● Обрабатывает действия пользователя

Основы паттернов ООП

Page 4: iOS-02-Паттерны ООП

Model

кастомные классы с данными

...

NSArray

NSDictionary

NSString

...

NSURLConnection

CLLocationManager

...

View

UIView

UILabel

UITextField

UIButton

UISwitch

UIToolbar

UITableView

UIImageView

...

Controller

UIApplicationDelegate

UIViewController

UINavigationController

UITabBarController

...

Для нашего клиентского кода это модель.

Сами для себя эти классы — система, имеющая свою модель и контроллер на более низком уровне абстракции.

Model-View-Controller

Основы паттернов ООП

Page 5: iOS-02-Паттерны ООП

ModelAddressBook

Коллекция записей о людях

Person

Запись об одном человеке

ViewTableView

Показывает список ячеек

TableViewCell

Показывает одну ячейку с текстом

Controller

?

Model-View-Controller

Основы паттернов ООП

Page 6: iOS-02-Паттерны ООП

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

Основы паттернов ООП

Page 7: iOS-02-Паттерны ООП

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

Основы паттернов ООП

Page 8: iOS-02-Паттерны ООП

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

Основы паттернов ООП

Page 9: iOS-02-Паттерны ООП

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)

?

Основы паттернов ООП

Page 10: iOS-02-Паттерны ООП

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

Основы паттернов ООП

Page 11: iOS-02-Паттерны ООП

Порождающий шаблон проектирования, гарантирующий что в приложении будет единственный

экземпляр класса с глобальной точкой доступа.

MyClass *instance = [MyClass sharedInstance];

+ Не нужно заботиться, создан ли уже объект

+ Легко доступен всем

– Легко доступен всем

Singleton

Основы паттернов ООП

Page 12: iOS-02-Паттерны ООП

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

Основы паттернов ООП

Page 13: iOS-02-Паттерны ООП

Этот метод реализации паттерна 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

Основы паттернов ООП