包建强的培训课程(8):iOS与设计模式
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
Normal
0
false
10 pt
0
2
false
false
false
EN-US
ZH-CN
X-NONE
$([{£¥·‘“〈《「『【〔〖〝﹙﹛﹝$(.[{£¥
!%),.:;>?]}¢¨°·ˇˉ―‖’”…‰′″›℃∶、。〃〉》」』】〕〗〞︶︺︾﹀﹄﹚﹜﹞!"%'),.:;?]`|}~¢
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
课程名称:iOS与设计模式
一、 简介
根据讲师十多年奋战在一线的实战经验,详细剖析对设计模式的理解与实践,尤其是结合最近几年来在iOS领域的思考和研究。本课程系列讲介绍GOF经典设计模式以及面向对象设计的5大原则,分析这些设计模式在iOS中的实际使用场景,并使用大量案例,在短短的几堂课中,帮助学员迅速掌握学习设计模式的方法。
本课程让学员掌握二十多个设计模式在Android中的使用场景,理解模式背后深层次的思想,更重要的是,学会如何学习一门新技术。
本课程对于开发以下App产品特别有帮助:
1、千万级用户的App产品。
2、业务功能繁多。
学习本课程应具备下列基础知识:
1、1-2年iOS开发经验。
2、对设计模式有一些了解或接触。
二、 培训大纲(2天)
第一天 上午
第1讲 SOLID五大原则及UML图绘制
1.
单一性原则
l 一个类只干一件事情
l
从ViewController中剥离UITableView
2.
开闭原则
l 对扩展开放,对修改封闭
l 从switch-case谈起
3.
里氏替换原则
l 父类,子类?
l 对多态的重新认识
l 白马与马
4.
依赖倒置原则
l 依赖于抽象,而不是依赖于具体
l 模版方法
l 从WebService到JSON
5.
接口隔离原则
l 类之间的依赖,建立于最小粒度的接口
l 看人下菜碟
l 宽窄接口
6.
迪米特法则
l 不要和陌生人说话
7.
UML图绘制
l 接口、类
l 类的关系(关联、依赖、聚合、组合)
8.
总结
l 组合,还是继承?
l 可插拔技术
l 面向接口编程
第2讲
创建型设计模式(一)
1.
简单工厂
l 定义及UML图、通用代码实现
l iOS中的使用场景:ViewController的viewDidLoad方法
l iOS中的一个例子:文件存储
2.
工厂模式
l 定义及UML图、通用代码实现
l 简单工厂与工厂的微小区别
l iOS中的使用场景:两步对象创建法
l 反射与工厂模式的配合
第一天 下午
第1讲
创建型设计模式(二)
1.
单例模式
l 定义及UML图、通用代码实现
l 多例
l iOS的内部支持:UIApplication和UIAccelerometer
l iOS中的使用场景:单例宏
3.
原型模式
l 定义及UML图、通用代码实现
l 浅拷贝和深拷贝
l NSCoping
l NSCoding
l App中的使用场景:再来一单
4.
生成器模式
l 定义及UML图、通用代码实现
l 编写一个例子:绘制笑脸
l 变体:Director的蜕化
第2讲
构造型设计模式(一)
1.
委托模式
l 神奇的delegate
l 委托模式的使用场合
2.
适配器模式
l 定义及UML图、通用代码实现
l 类适配器和对象适配器
l 一个例子:变压器
l iOS中的内部支持:Delegate以及UITableView
l 使用Block实现适配器模式
3.
桥接模式
l 定义及UML图、通用代码实现
l 两个维度的简单工厂
l 加法,还是乘法?
l 编写一个例子:蜡笔与水彩笔
4.
代理模式
l 定义及UML图、通用代码实现
l 静态代理和动态代理
l 远程代理
l 虚拟代理
l 保护代理
l iOS中的内部支持:NSProxy
第二天 上午
第1讲
构造型设计模式(二)
1.
组合模式
l 温习一下递归算法
l 定义及UML图、通用代码实现
l 实现的两种方式
l 一个现实中的例子:山上有座庙
l iOS中的内部支持:UIView的层级结构
2.
享元模式
l 定义及UML图、通用代码实现
l 不变模式
l 享元是多例与不变模式的组合
l 自己编写一个例子:围棋
3.
装饰器模式
l 定义及UML图、通用代码实现
l 编写一个例子:炒菜
l 给工厂增加新方法
l 使用Category来实现装饰器模式
4.
外观模式
l 定义及UML图、通用代码实现
l 与单一职责设计原则的冲突
第2讲
行为型设计模式(一)
1.
职责链模式
l 定义及UML图、通用代码实现
l 写一个例子:游戏中的伤害计算
l iOS中的内部支持:UIView中的事件处理和动作消息
2.
模版方法模式
l 定义及UML图、通用代码实现
l 基于策略模式的排序算法
l iOS中的内部支持:UIView的钩子方法drawRect
3.
命令模式
l 定义及UML图、通用代码实现
l 例子1:玉皇大帝派太上老君封孙悟空为齐天大圣
l 回滚(undo)
l 在iOS中的应用:NSInvocation与NSUndoManager
4.
备忘录模式
l 定义及UML图、通用代码实现
l 回滚机制的另一种实现
l 例子:单机游戏的保存和加载
l 宽窄接口:IMemento
第二天 下午
第1讲
行为型设计模式(二)
1.
迭代器模式
l 定义及UML图、通用代码实现
l 在iOS中的内部支持:NSEnumerator及延伸
2.
策略模式
l 定义及UML图、通用代码实现
l App中的应用:基于UITextView的验证器
3.
观察者模式
l 定义及UML图、通用代码实现
l 例子:RSS
l 在iOS中的内部支持1:KVO
l 在iOS中的内部支持2:NSNotificationCenter
4.
中介者模式
l 定义及UML图、通用代码实现
l 编写一个例子:房产中介
l 在iOS中的应用:UIViewController中控件间通信
5.
状态模式
l 定义及UML图、通用代码实现
l 写一个例子:空调遥控器
l 在App中的应用:用户登录
第2讲
总结回顾
1.
回顾23个设计模式
2.
设计模式沉思
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
Normal
0
false
10 pt
0
2
false
false
false
EN-US
ZH-CN
X-NONE
$([{£¥·‘“〈《「『【〔〖〝﹙﹛﹝$(.[{£¥
!%),.:;>?]}¢¨°·ˇˉ―‖’”…‰′″›℃∶、。〃〉》」』】〕〗〞︶︺︾﹀﹄﹚﹜﹞!"%'),.:;?]`|}~¢
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:Calibri;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;}
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
包建强的培训课程(8):iOS与设计模式的更多相关文章
- 包建强的培训课程(7):iOS企业级开发实战
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 包建强的培训课程(13):iOS与ReactNative
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 包建强的培训课程(11):iOS Runtime实战
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 包建强的培训课程(12):iOS深入学习(内存管理、Block和GCD等)
@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=Syn ...
- 包建强的培训课程(3):App竞品技术分析
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 包建强的培训课程(4):App测试深入学习和研究
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 包建强的培训课程(1):Android App企业级开发
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 包建强的培训课程(2):Android与设计模式
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 包建强的培训课程(16):Android新技术入门和提高
@import url(/css/cuteeditor.css); Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈 ...
随机推荐
- 一文看懂大数据的技术生态Hadoop, hive,spark都有了[转]
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...
- 使用发射将JavaBean转为Map
import java.lang.reflect.Field; private static Map<String, Object> objectToMap(Object obj) thr ...
- MUI 添加自定义图标(注意点)
参考: https://blog.csdn.net/qq_39759115/article/details/79436606 注意: 1. 将这个原来的逗号改成分号 2. 这些图标的名字都可以改名字
- Python读取excel表的数据
from openpyxl.reader.excel import load_workbook #读取xlsx文件def readExcelFile(path): dic={} #打开文件 file= ...
- Mysql运行状态查询命令及调优详解
(转载自点击打开链接) MySQL运行状态及调优(一) 一.查看MySQL运行情况SHOW STATUS; 二.查看INNODB数据库引擎运行状态SHOW ENGINE INNODB STATUS; ...
- java之数据库相关
这篇还是在回顾知识.主要是关于java连接Sqlserver2012数据库的一些方式记录,以便以后查询. 十一之内复习完这些知识就可以新学Hibernate啦(*^▽^*) 1.普通方式 注意,在连接 ...
- 团队项目Alpha冲刺阶段之学习总结
线性布局 线性布局是程序中最常见的种布局方式,可以分为水平线性布局和重直线性布局两种,通过Android:orientation属性可以设置线性布局的方向.线性布局的特点是各个子元法彼此连接,中间不留 ...
- ES6 Template Strings(转)
转自:https://developers.google.com/web/updates/2015/01/ES6-Template-Strings Strings in JavaScript have ...
- docker启动异常driver not supported
使用阿里云机器重启docker服务出现错误提示信息 [root@iz2ze5ivwiz2bnwddc20k4z ~]# systemctl restart docker Job for docker. ...
- 《数学之美》--第一章:文字和语言 vs 数字和信息
PDF下载 第一章 文字和语言 vs 数字和信息 数字.文字和自然语言一样,都是信息的载体,它们之间原本有着天然的联系.语言和数学的产生都是为了同一个目的-记录和传播信息.但是,直到半个多世纪前香农博 ...