面向对象三要素:继承、多态、封装(iOS)
来源:互联网 发布:java方法中布尔型变量 编辑:程序博客网 时间:2024/05/19 17:58
新浪微博:love_in_sky
2017年7月25日最新文章。
一、继承:
不要继承了,使用实现接口的方式吧。
设计UI组件的时候,容易将视图、数据和业务逻辑带进去。自定义的组件就成了一个臃肿的集合体,然后有新的需求的时候,你会选择继承一个,然后开始巴拉巴拉。这是很有问题的。看看系统提供的UITabelView,你就明白,它把数据和视图内容分开,数据部分使用接口去实现。然后我们将业务代码放在数据接口中,当然业务代码也可以被抽离出来。
所以这种情况下不要使用继承。
分清is-a和has-a:
is-a就是继承,has-a可以是组合或者包含成员。
什么时候使用继承?
1、MVC的model层面,不提供业务,只提供服务时,可用继承。
2、MVC的view层面,UITableViewCell这类的,可以使用继承。
怎样替代继承?
用Aspect+load来实现重载函数。
用Protocol定义接口。
用Category来实现添加函数。
耍点手段用Category来添加property。
二、多态:
可以使用父类+关联接口的模式。父类中定义一个实现关联接口的自身类。然后解决四大问题:
1、父类有部分public的方法是不需要,也不允许子类覆重
和工程师定义,所有的父类public方法都不允许被子类覆盖。
2、父类有一些特别的方法是必须要子类去覆重的,在父类的方法其实是个空方法
通过关联接口中的required方式规定子类必须实现的接口,父类就不必写空方法,直接调用子类的实现方法。
3、父类有一些方法是可选覆重的,一旦覆重,则以子类为准
在接口中的一些可选方法的后缀加入ByChild,表示会覆盖父类相关方法,并以子类为准。
4、父类有一些方法即便被覆重,父类原方法还是要执行的
在接口中的一些可选方法的后缀加入ByParentAndChild,表示会自动调用父类ByParent方法,然后自己加入子类的逻辑。
三、封装:
不是所有数据都需要去封装的,比如经常会封装的是model层,将返回的数据封装成一个个model,其实并不需要如此。因为将服务端返回的数据或者客户端请求的参数封装成一个个model时,会让很多操作变得更加复杂,比如需要转化,调试需要做处理才能更直观,容易插到各个不同的业务中,造成强耦合。
如果是单单指:把对外接口暴露,将实现和内部数据隐藏。没毛病
总结:
iOS架构谈,学会横切。一般在控制器的内部,大多数人都是面向过程的编程,我们通过纵切,将代码分撒各处。学会纵切只能说明你懂得复用代码,但可能引入危险的继承。横切则是将流程的关键点列出来,在关键点前后插入处理过程,可以认为是面向切片编程,横切更多的是采用接口实现。如果事先不知道如何横切,可以写多个纵切,然后在纵切中寻找可以横切的点。横切的好处是可以拆离数据和业务相关,更好移植。
- 面向对象三要素:继承、多态、封装(iOS)
- Java面向对象(封装、继承、多态)
- 面向对象封装,继承,多态(一)
- 面向对象封装,继承,多态(二)
- 面向对象(封装,继承,多态)
- C++面向对象(封装,继承,多态)
- 面向对象编程(封装、继承、多态)
- 面向对象编程(继承,封装,多态)
- 面向对象--继承,多态,封装
- 面向对象 封装、继承、多态
- 面向对象:封装、继承、多态
- **蓝懿** iOS面向对象 封装 继承 多态
- iOS探索--面向对象三大特征封装、继承、多态
- 面向对象三要素:封装继承多态的阐述及示例
- 面向对象,封装,继承
- (二)面向对象之封装,继承,多态(上)
- (三)面向对象之封装,继承,多态(下)
- 黑马程序员-面向对象(封装,继承,多态)
- angular-ui-grid merge cells in column(合并列上的单元格)
- 测试使用-批量往es索引中添加数据,es的使用小结。
- 记在银联电子支付的上线感想
- 【bzoj2084】 [Poi2010]Antisymmetry
- Eclipse Memory Analyzee Java内存分析工具安装教程和使用
- 面向对象三要素:继承、多态、封装(iOS)
- 【bzoj3721】 PA2014 Final Bazarek
- mybatis之入门到开发(一)之基础原理概念+入门小程序
- 学习Bootstrap后制作一个小dome的所思
- 图像处理8:局部复制粘贴
- LeetCode 258 Add Digits
- 【bzoj1132】 [POI2008]Tro
- 实现一个左边宽度固定,右边自适应
- Python学习03_图片像素操作