Android设计模式及面向对象原则

分类

设计模式分为三种类型:
(1)创建型模式5种:单例模式,抽象工厂模式,工厂模式,原型模式,建造者模式。
(口诀:单原建造者,东西二厂)
(2)结构型模式7种:适配器模式,桥接模式,装饰模式,组合模式,外观模式,享元模式,代理模式。
(口诀:一器一桥一元一代理;装饰组合外观)
(3)行为型模式11种:观察者模式,中介者模式,访问者模式,解释器模式,迭代器模式,备忘录模式,责任链模式,状态模式,策略模式,命令模式,模板模式。
(口诀:三者两器、一录一链一模板,状态策略命令)

面向对象六大原则

单一职责原则SRP
  • 定义:一个类应该是相关性很高的数据封装
  • 举例:现在有一个图片加载类. 但是这个类内部包含了 图片下载的逻辑 , 图片缓存的逻辑 这样就使得这个类的职责过多, 随着功能的不断完善, 这个类的代码和逻辑也变得纵横交错混合在了一起. 对于后续的修改维护扩展都是不利的. 所以让两个类组合起来, 一个类内部只负责 图片下载 ,另一个类内部负责 图片缓存 . 保持每个类的 单一职责
开闭原则OCP
  • 定义:软件中的对象应该对于扩展开放的,但是对于修改来说是封闭的。也就是通过扩展的方式来实现变化,而不是通过修改已有的代码来实现
  • 举例:最好使用继承,接口来实现附加的功能
里氏替换原则LSP
  • 定义:所有引用基类的地方必须能透明地使用其子类。也就是,要抽象,基于继承多态
  • 举例:方法参数传入。比如onClick(View view)传入一个View,这个View可以是Button也可以是TextView,也就是说,LSP的核心就是抽象,而抽象又依赖于继承。通常,里氏替换和开闭原则是不离不弃的。
依赖倒置原则DIP
  • 定义:指代了一种特定的解耦形式, 使得高层次的模块不依赖于低层次的模块的实现细节的目的, 依赖模块被颠倒了. 通俗点 : 在Java中依赖抽象(接口,抽象类), 而不依赖具体实现类. 模块之间的依赖通过 抽象 发生, 实现类之间不发生直接的依赖关系, 其依赖关系是通过接口或抽象类产生.
  • 举例:还是在 OCP 中的例子, 内部加载类依赖于也就是成员变量是 缓存接口 , 而不是具体的某一个 单缓存 或者 双缓存 的实现类.
接口隔离原则ISP
  • 定义:接口的依赖关系应该建立在最小的接口上. 通俗点 :接口隔离原则的目的是系统解开耦合, 从而容易重构, 更改和重新部署.
  • 举例:在操作一些 IO文件,网络 的时候我们总是伴随着 try…catch…finally . 在最终调用块中调用 close() 确保资源可以正确的释放. 但这样这样的代码不仅可读性差可以每次都是写一些冗余的模板代码. 其实可以提供一个静态方法, 而根据java中的的特性,之上操作的对象都会实现一个标识接口Closeable ,这个接口标识了一个可关闭的对象有一个 close() . 所以这个静态方法的形参接收一个 Closeable 接口,并在方法内调用 close() 即可. 仔细想想: 这个方法的形参在调用的时候传入的实参是 里氏替换原则 , 而方法内部调用的是一个接口的 close() 方法,但传入的可能是某一个实现类,那么这不就是 依赖导致原则 ,并且建立在最小化的依赖基础上, 只要知道这个对象是可关闭的, 别的一概不关心, 这就是 接口隔离原则 .
迪米特原则LOD
  • 定义:一个对象应该对其他对象有 最少 的了解. 通俗点 : 一个类应该对自己需要耦合或调用的类知道的最少, 类的内部如果实现与调用者或者依赖者没有关系, 调用者或者依赖者只需要知道他需要的方法即可, 其他一概不管.
  • 举例: 房间类, 中介类, 上班族类. 可以 上班族 应该只关心 中介类 , 而不需要关注 房间类 . 只需要 中介类 返回房子的地址即可. 而不需要通过调用 中介类 返回一个 房间类 . 这也就是代码中需要注意的. 不要过度耦合, 要降低类之间的关系.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值