《Android设计模式源码解析》笔记(一)

第一章:面向对象的六大原则
1. 单一职责

每一个类的类名需要概述其核心意义,如Cache类,StringUtils类。因此每个类都应该只有它单一的作用元素。(这个原则最简单也最复杂,什么是类的职责,以及怎么划分类的职责)

2. 开闭原则

对扩展该类的开放,对修改该类的封闭。

如在程序中都会用到图像加载类,图像加载的框架有很多种,Picasso、Glide、Imageloader等。当我们切换图片加载框架时,应当考虑只切换框架的实现方法,不更改其使用的地方。

3. 依赖倒置
  • 高层次不应该依赖低层次模块,两者都应该依赖抽象
  • 抽象不应该依赖细节
  • 细节不应该依赖抽象

在java语言中的表现就是:模块间的依赖通过抽象产生,实现类之间不发生直接的依赖关系,其依赖关系是通过抽象类或者接口产生。可以概括为面向接口编程,或者面向对象编程。

如okhttp中的拦截器接口,用户可以按自己的要求实现该接口的方法,okhttp并不依赖其拦截器的具体实现,只依赖拦截器的抽象接口。

4. 里氏替换

里氏替换原则的核心是抽象、但是抽象又依赖于继承的特性。

拿Android源码来说,源码中的TextView、ImageView都继承View的抽象接口。所以任何继承自View的类都可以设置给show()方法。

继承的优点:

  • 代码重用,减少类的创建成本,每个类都拥有父类的方法和属性

  • 子类和父类基本相似,但又与父类有所区别

  • 提高代码的可读性

缺点:

  • 继承具有侵入性,只要继承就必须拥有父类的所有属性和方法

  • 可能造成代码冗余、灵活性降低、因为子类必须拥有父类的属性和方法

5. 接口隔离

接口隔离原则英文全称是Interface Segergation Principles,缩写是ISP。ISO的定义是:客户端不应该依赖它不需要的接口。另一种定义是:类间的依赖关系应该建立在最小的接口上。

如之前提到的图片加载框架,我们使用时只依赖于抽象方法,去调用图片的加载、缓存等方法。但我们并不需要知道加载或缓存方法的具体实现

6. 迪米特原则

迪米特原则有一个英文解释是Only talk to your immedate friends(“只与直接的朋友通信”),每个对象都必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,这种关系的类型有很多,如组合、聚合、依赖等。

如图像加载类的缓存实现,用户不用知道缓存方法的具体逻辑,当底层改动了缓存方法时,用户也是无感知的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值