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

Post on 28-Jun-2015

172 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

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

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

top related