IOS设计模式学习(1)设计模式初窥
1 前言
有些人可能会问,我也能实现某某功能,为什么要花时间来学习设计模式。今天我们就来了解一下设计模式的优势:
程序(包括对象和类),如果在设计中使用了设计模式,将来将更易于复用与扩展,更易于变更。而且基于设计模式的程序会更加简洁而高效,因为达到同样目的的所需代码行数会更少。
接下来就让我们一起走入神奇的设计模式的世界来体会其给我们带来便利。
2 详述
记得之前文章我们介绍了Cocoa Touch的MVC模式,而他并非最基本的设计模式,它包含了若干更加基本的设计模式:组合(Composite),命令(Command),中介者(Mediator),策略(Strategy)和观察者(Observe)。
2.1 几种常见设计模式介绍
2.1.1 组合:
视图对象之间以协作的方式构成一个视图层次体系,其中既可以有复合视图(比如表格视图),也可以有独立视图(比如文本框或按钮)。每个层次的每个视图节点都可以影响用户的操作并把自己绘制到屏幕上。
2.1.2 命令:
这是一种“目标-动作”机制,视图对象可以推迟其他对象(比如控制器)的执行,让其他对象等到发生了某些事件后再执行。
2.1.3 中介者:
控制器对象起着中间人的作用,它构成了在模型和视图对象之间传递数据的双向通道。应用程序的控制器对象将模型的变更传达给视图对象。
2.1.4 策略:
控制器是视图对象的一个“策略”,视图对象将自身隔离,以期维持其作为数据展示器的唯一职责,而将一切应用程序特有的界面行为的决定委派给它的“策略”对象(即控制器)。
2.1.5 观察者:
模型对象向它所关注的控制器等对象发出内部状态变化的通知。
2.2 协议与抽象类
2.2.1 针对接口编程
针对接口编程,而不是针对实现编程。
接口继承与类继承:
接口继承(子类型化):让我们可以用一个对象代替另一个对象。
类继承:通过复用父类的功能或者只是简单的共享代码和表述,来定义对象的实现和类型的一种机制。
定义具有相同接口的类群很重要,因为多态是基于接口的。Objective-C种有一种,确定了客户端同所用的具体类之间的一种“合约”的东西,叫做协议(protocol)。协议也是对象之间的一种合约,但是本身不能实例化伟对象。实现协议或者从抽象类继承,使得对象共享相同的接口。
通常的做法是:在客户端的代码中不声明特定具体类的变量,而只是使用协议或者抽象类定义的接口。
2.2.2 @protocol与抽象基类
协议的语法为@protocol,并不定义任何实现,而只是声明方法(method),以确定符合协议的类的行为。只定义了抽象行为的“接口”。实现协议的类定义这些方法的实现,以执行真正的操作。
另一种定义高度抽象类型的方法是定义抽象基类(Abstract Base Class,ABC)。通过抽象基类,我们可以生成一些其他自雷可以共享的默认行为。
协议中可以用@optional指令(directive)将协议部分方法变更为“可选的”。
如果客户端要使用由协议所定义类型的对象,比如有个协议叫Mark,则需要使用:
id<Mark>thisMark;
如果Mark被声明为抽象基类,那么语法应该分其他类一样:
Mark* thisMark;
Objective-C不支持多重继承,所以要用协议来进行扩展。
优先使用协议而不是类继承。
3 结语
作为开篇文章,我不想做太多的赘述,就先介绍这么多剩下的我们慢慢来研究,希望对大家有所帮助。
转载于:https://www.cnblogs.com/dyllove98/archive/2013/06/12/3132967.html
IOS设计模式学习(1)设计模式初窥相关推荐
- STM32学习笔记之一(初窥STM32)
怎么做好学习笔记? 答:自我感知-->学习知识-->归纳总结-->自我升华(真正属于自己的知识是,抛开书本,运用时,你还能记得的思想) 自我感知--看到知识概念,先自我感觉那应该是个 ...
- CUDA编程学习3——并行计算初窥CUDA的软硬件架构
目录 并行计算概述 查看GPU相关信息 软硬件架构基础 物理层(物理结构) 逻辑层(kernel组织) 物理层和逻辑层的总结 参考 并行计算概述 所谓并行计算的概念定义 同时多个计算资源一起工作(逻辑 ...
- 尚硅谷设计模式学习(1)---[设计模式七大原则]
- iOS开发~细聊设计模式
目录 一.概述 二.框架模式,框架,设计模式 1.框架模式 (1)MVC (2)MVVM (3)MVP 2.设计模式 (1)原型模式(Prototype pattern) (2)简单工厂模式.工厂模式 ...
- iOS中MVC等设计模式详解
iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...
- 23种设计模式学习记录之代理模式
想说的话: 在大学的时候曾经学过这23种设计模式,但是那时没啥编程经验,糊里糊涂过了一遍,没多久就忘记了,工作之后将精力主要集中在学习新技术上,比如springboot,cloud,docker,vu ...
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- Builder (建造者) — 【面向对象设计模式学习】
Builder (建造者) - [面向对象设计模式学习] By CityWalker 2010年3月19日 Intent Separate the construction of a complex ...
- 设计模式学习笔记清单
设计模式学习笔记清单 关于设计模式许多人已经耳熟能详,这段时间结合李建忠的教学视频以及大量网络资料,把这部分过了一遍,整理出学习笔记,而真正的深入学习和理解只能在具体的开发环境中日积月累. ...
最新文章
- pytorch nn.LSTM()参数详解
- 路由器默认密码(转自ITAA)
- Python 网络爬虫笔记8 -- 股票数据定向爬虫
- javascript基础07
- asp.net 页面静态化
- c是过程化语言吗数据库,关于SQL错误的是()A、所有数据库的公共语言B、非过程化的C、统一的语言D、所有用SQL缩写的程序都...
- PyTorch实战福利从入门到精通之八——深度卷积神经网络(AlexNet)
- win8.1计算机开启远程桌面连接不上,Win8.1电脑远程桌面无法连接提示“你的凭据不工作”怎么办...
- 拓端tecdat|R语言中绘制箱形图的替代品:蜂群图和小提琴图
- 魔兽世界服务器Trinitycore分析二:auth server的main函数
- missing privilege separation directory /var/empty/sshd问题解决
- 免费的mysql云平台_免费的mysql云服务器
- JavaWeb的架构
- 导数用于判断函数的单调性,凹凸性,极值
- 讯飞广告移动反欺诈算法竞赛
- centos usb转网口_如何将USB接口打印机转换成RJ45网口并安装到打印服务器上共享使用?...
- scratch3.0-积木介绍
- 2022年中国人工智能芯片行业发展现状及发展趋势分析:芯片需求持续增长,发展空间大[图]
- 八戒资本:瑞波大跌,又逢西方节假日,还是存在大幅探低回升可能。
- 纠正对ddos的错误认识及对国内厂商技术点评
热门文章
- python封装api给vue_vue的封装
- 系统架构图怎么画_基于ROS的移动机器人上层系统架构分析
- 如何用计算机画立方体,画立方体-计算机图形学实验.doc
- python编程大赛队名_【推荐】程序员团队名称和口号word版本 (12页)
- 计算机数控装置论文,数控专业(论文)范文.doc
- 韶音耳机连不上电脑_骨传导耳机哪个牌子好,骨传导耳机推荐
- 宽依赖和窄依赖_Spark术语解释及宽窄依赖执行原理,代码分析
- android 网络加载图片点击大图后 浏览 可 缩放,Android 网络加载图片点击大图后 浏览 可 缩放...
- oracle tns连接拒绝,TNS-12564: TNS: 拒绝连接(new)
- 14.QueuedConnection和BlockingQueuedConnection连接方式源码分析