Android 进阶 设计模式之“软件设计概要”面向对象的抽象设计模式(一)
什么是设计模式
模式,代表对一种常见的重复的问题的一个公认的解决方案或做法,我们把这些方案总结下来,以后每次遇到类似问题,就直接从这些设计模式中取出一个适用的模式。
就像我们生活中有许多重复性的事情,例如上厕所,对应的模式就是找到厕所,根据性别进入不同房间,xxxx,我们把这套上厕所的方案总结下来,以后上厕所就不需要重新思考要怎么做了。
就像一条公式,牛顿把F = ma 总结出来了,以后要计算力的时候,我们就不需要花时间重新实验、推导,而是直接套用。
“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必重复劳动。”
---- Christopher Alexander
可复用是目标、面向对象是手段
可复用是目标
设计模式推荐书籍-- 可复用面向对象软件的基础 - 23种经典的,但有些是落伍的
从面向对象谈起
从面向对象谈起
- 底层思维(向下)
- 抽象思维(向上)
深入理解面向对象
深入理解面向对象
软件设计固有的复杂性的根本原因
复杂性的根本原因
如何解决复杂性
- 分解
普通人类解决复杂问题的常见方法:分而治之,把一个大问题分成小问题一步一步解决 - 抽象
高层次来讲, 忽略 -- 抽象 :这是人们处理复杂性的一个通用技术,即抽象。
由于不能掌握全部的复杂对象,我们会选择性地忽视与实际问题无关的细节---- 非本质细节 ,从而去处理 泛化、理想化 的 对象模型
既然我们是程序猿,用的java来写Android,当然就要用面向对象的方式,抽象解决辣!
实例 ---> 抽象设计模式 --- 多态的运用
例如我们要制作一个 绘制特定形状的App :
起初产品狗给我们猿类的需求只需要两个形状(直线、矩形),啊,真好,那我们弄两个对象分别代表直线、矩形,再做个判断看用户选择的是矩形还是直线,然后执行各自对象的draw()方法就好了。
翌日:
猿:卧槽,你说要加多10个形状?为毛昨天不说!!!
狗:你懂的~
猿:我艹.....
好吧,我们还要继续原本的方案,在对象层添加10个形状的对象,在绘制层加10个判断,写10次绘制方法吗?
要是那天杀的产品狗突然又要加10个形状,或者删减形状,我不就又要修改绘制层和对象层这两个类?好没效率啊!!!!
咦,既然我们是面向对象编程,这些形状对象都是被绘制的对象呀,执行的都是draw方法,不就相当于是同一个东西吗?
猫会叫,狗会吠,鸡会鸣,他们都是会 叫 的 动物 !
直线画直线,矩形画矩形,圆形画圆形,哦!它们都是 会画画 的 形状 !
这么一想,我们就抽象出了一个抽象基类(因为不需要实例化,只是用来代表一系列同类型的形状):Shape,抽象方法:draw()
那么 绘制层以后就可以不需要为每一个新形状添加判断和绘制方法了。
分立的方案
抽象后的方案
把同类型的对象抽象成一个基类,在最终的那一层使用基类的对象(多态),因为他们都执行同一个方法,只是方法的结果不一样,这样日后添加新的子类,实现抽象的绘制方法,而那一层的代码不需要改变,提高程序的可扩展性。
文/Raymond_qi_kang
关键字:android, 产品经理, 抽象
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!