Android 进阶 设计模式之“软件设计概要”面向对象的抽象设计模式(一)

什么是设计模式


模式,代表对一种常见的重复的问题的一个公认的解决方案或做法,我们把这些方案总结下来,以后每次遇到类似问题,就直接从这些设计模式中取出一个适用的模式。
就像我们生活中有许多重复性的事情,例如上厕所,对应的模式就是找到厕所,根据性别进入不同房间,xxxx,我们把这套上厕所的方案总结下来,以后上厕所就不需要重新思考要怎么做了。
就像一条公式,牛顿把F = ma 总结出来了,以后要计算力的时候,我们就不需要花时间重新实验、推导,而是直接套用。

“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必重复劳动。”
---- Christopher Alexander


可复用是目标、面向对象是手段

可复用是目标

设计模式推荐书籍-- 可复用面向对象软件的基础 - 23种经典的,但有些是落伍的

从面向对象谈起


从面向对象谈起

  1. 底层思维(向下)
  2. 抽象思维(向上)

深入理解面向对象


深入理解面向对象

软件设计固有的复杂性的根本原因


复杂性的根本原因

如何解决复杂性


  1. 分解
    普通人类解决复杂问题的常见方法:分而治之,把一个大问题分成小问题一步一步解决
  2. 抽象
    高层次来讲, 忽略 -- 抽象 :这是人们处理复杂性的一个通用技术,即抽象。
    由于不能掌握全部的复杂对象,我们会选择性地忽视与实际问题无关的细节---- 非本质细节 ,从而去处理 泛化、理想化 的 对象模型

既然我们是程序猿,用的java来写Android,当然就要用面向对象的方式,抽象解决辣!


实例 ---> 抽象设计模式 --- 多态的运用


例如我们要制作一个 绘制特定形状的App :
起初产品狗给我们猿类的需求只需要两个形状(直线、矩形),啊,真好,那我们弄两个对象分别代表直线、矩形,再做个判断看用户选择的是矩形还是直线,然后执行各自对象的draw()方法就好了。

翌日:
猿:卧槽,你说要加多10个形状?为毛昨天不说!!!
狗:你懂的~
猿:我艹.....

好吧,我们还要继续原本的方案,在对象层添加10个形状的对象,在绘制层加10个判断,写10次绘制方法吗?
要是那天杀的产品狗突然又要加10个形状,或者删减形状,我不就又要修改绘制层和对象层这两个类?好没效率啊!!!!
咦,既然我们是面向对象编程,这些形状对象都是被绘制的对象呀,执行的都是draw方法,不就相当于是同一个东西吗?

猫会叫,狗会吠,鸡会鸣,他们都是会 叫 的 动物 !
直线画直线,矩形画矩形,圆形画圆形,哦!它们都是 会画画 的 形状 !

这么一想,我们就抽象出了一个抽象基类(因为不需要实例化,只是用来代表一系列同类型的形状):Shape,抽象方法:draw()
那么 绘制层以后就可以不需要为每一个新形状添加判断和绘制方法了。

分立的方案

抽象后的方案

把同类型的对象抽象成一个基类,在最终的那一层使用基类的对象(多态),因为他们都执行同一个方法,只是方法的结果不一样,这样日后添加新的子类,实现抽象的绘制方法,而那一层的代码不需要改变,提高程序的可扩展性。

文/Raymond_qi_kang

关键字:android, 产品经理, 抽象


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部