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

Noveo
NoveoNoveo
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
Основы паттернов ООП
Model
AddressBook
Коллекция записей о людях
Person
Запись об одном человеке
View
TableView
Показывает список ячеек
TableViewCell
Показывает одну ячейку с текстом
Controller
?
Model-View-Controller
Основы паттернов ООП
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
View
TableView
?
TableViewCell
Label *title
Label *subtitle
Controller
AddressBookVC
AddressBook *book
UITableView *table
Model-View-Controller
Основы паттернов ООП
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Controller
AddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Основы паттернов ООП
Controller
AddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Основы паттернов ООП
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Model
AddressBook
-(int)count
-(Person*)get:(int)
-(void)add:(Person*)
Person
NSString *name
NSString *phone
Delegate
Controller
AddressBookVC<TableDelegate>
AddressBook *book
UITableView *table
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
?
Основы паттернов ООП
Controller
AddressBookVC<TableDelegate,
ModelObserver>
AddressBook *book
UITableView *table
-(void)modelUpdated:(Model*)
-(int)numberOfRows
-(Cell*)cellForRow:(int)
-(void)didSelectRow:(int)
View
TableView
id<TableDelegate> delegate
-(void)update
TableViewCell
Label *title
Label *subtitle
Model
AddressBook
-(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
Основы паттернов ООП
1 sur 13

Recommandé

JavaScript design patterns overview par
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview Kseniya Redunova
1.7K vues32 diapositives
MarionetteJS. Shall we dance? par
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?Kseniya Redunova
929 vues37 diapositives
MVVM in WPF par
MVVM in WPFMVVM in WPF
MVVM in WPFSviataslau Seviaryn
684 vues19 diapositives
Принципы проектирования S.O.L.I.D par
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
16.9K vues29 diapositives
Как писать красивый код или основы SOLID par
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
5.3K vues23 diapositives
Паттерны проектирования par
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
127 vues26 diapositives

Contenu connexe

Similaire à iOS-02-Паттерны ООП

Как пройти собеседование и получить первую работу на Swift par
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на SwiftAnton Loginov
2.1K vues19 diapositives
django.pdf par
django.pdfdjango.pdf
django.pdfAntonPolovnikov1
5 vues8 diapositives
Django par
DjangoDjango
DjangoPolinaPolovnikova
20 vues8 diapositives
чмв лекция №5 par
чмв   лекция №5чмв   лекция №5
чмв лекция №5student_kai
747 vues21 diapositives
ASP.NET, MVC, ASP.NET MVC par
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
2.6K vues29 diapositives
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers par
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
1.5K vues62 diapositives

Similaire à iOS-02-Паттерны ООП(20)

Как пройти собеседование и получить первую работу на Swift par Anton Loginov
Как пройти собеседование и получить первую работу на SwiftКак пройти собеседование и получить первую работу на Swift
Как пройти собеседование и получить первую работу на Swift
Anton Loginov2.1K vues
чмв лекция №5 par student_kai
чмв   лекция №5чмв   лекция №5
чмв лекция №5
student_kai747 vues
ASP.NET, MVC, ASP.NET MVC par GetDev.NET
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET2.6K vues
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers par Глеб Тарасов
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Dependency injection par GetDev.NET
Dependency injectionDependency injection
Dependency injection
GetDev.NET2K vues
Backbone.js Профилактика сколиоза par MitinPavel
Backbone.js Профилактика сколиоза Backbone.js Профилактика сколиоза
Backbone.js Профилактика сколиоза
MitinPavel976 vues
AngularJS basics & theory par DevOWL Meetup
AngularJS basics & theoryAngularJS basics & theory
AngularJS basics & theory
DevOWL Meetup40.2K vues
C# Web. Занятие 09. par Igor Shkulipa
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
Igor Shkulipa1.6K vues
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext par GoSharp
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNextВнедрение зависимостей в ASP.NET MVС и ASP.NET vNext
Внедрение зависимостей в ASP.NET MVС и ASP.NET vNext
GoSharp1.2K vues
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём par FrontDays
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нёмFrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём
FrontDays1.1K vues
Стандарты и соглашения в сложных ООП-приложениях par Magecom Ukraine
Стандарты и соглашения в сложных ООП-приложенияхСтандарты и соглашения в сложных ООП-приложениях
Стандарты и соглашения в сложных ООП-приложениях
Magecom Ukraine539 vues

Plus de Noveo

Гуманитарные специальности в IT-индустрии par
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииNoveo
9.3K vues10 diapositives
Box model, display and position (HTML5 тема 07 - box model, display position) par
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Noveo
442 vues26 diapositives
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню) par
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Noveo
502 vues15 diapositives
Стилизация текста (HTML5 тема 05 - стилизация текста) par
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Noveo
715 vues22 diapositives
Семантика текста (HTML5 тема 04 - семантика текста) par
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Noveo
545 vues12 diapositives
Основы CSS (HTML5 тема 02 - основы CSS) par
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Noveo
279 vues42 diapositives

Plus de Noveo(20)

Гуманитарные специальности в IT-индустрии par Noveo
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
Noveo9.3K vues
Box model, display and position (HTML5 тема 07 - box model, display position) par Noveo
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
Noveo442 vues
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню) par Noveo
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Noveo502 vues
Стилизация текста (HTML5 тема 05 - стилизация текста) par Noveo
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
Noveo715 vues
Семантика текста (HTML5 тема 04 - семантика текста) par Noveo
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
Noveo545 vues
Основы CSS (HTML5 тема 02 - основы CSS) par Noveo
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
Noveo279 vues
Структура HTML документа (HTML5 тема 01 - структура html документа) par Noveo
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
Noveo402 vues
Yii2 par Noveo
Yii2Yii2
Yii2
Noveo662 vues
Сессии и авторизация par Noveo
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
Noveo244 vues
Rest par Noveo
RestRest
Rest
Noveo370 vues
PHP basic par Noveo
PHP basicPHP basic
PHP basic
Noveo244 vues
PHP Advanced par Noveo
PHP AdvancedPHP Advanced
PHP Advanced
Noveo275 vues
PHP and MySQL par Noveo
PHP and MySQLPHP and MySQL
PHP and MySQL
Noveo229 vues
MySQL par Noveo
MySQLMySQL
MySQL
Noveo117 vues
Push Notifications (Lecture 22 – push notifications) par Noveo
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
Noveo233 vues
RxJava+RxAndroid (Lecture 20 – rx java) par Noveo
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
Noveo952 vues
Работа с соцсетями (Lecture 19 – social) par Noveo
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
Noveo253 vues
Работа с геоданными (Lecture 18 – geolocation) par Noveo
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
Noveo316 vues
Animations (Lecture 17 – animations) par Noveo
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
Noveo332 vues
Toolbar (Lecture 16 – toolbar) par Noveo
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
Noveo236 vues

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