面向对象的六大原则

单一职责原则(single responsibility principle)——优化代码的第一步
  • 小明写的图片加载框架中将各个功能拆分,将ImageLoader一分为二,ImageLoader只负责图片的加载逻辑,ImageCache只负责图片的缓存逻辑;这样ImageLoader的代码量少了,逻辑也清晰了
开闭原则(open close principle)——让程序更稳定、更灵活
  • 软件中的对象(类、模块、函数)应该对扩展是开放的,但是对修改是封闭的。而遵守开闭原则的重要手段应该时通过抽象…;开闭原则指导我们,当软件需要变化时,应该“尽量”通过扩展的方式来实现变化,而不是修改已有的代码; 并不是绝对的,现实场景中会有修改源码的情况。
  • 小明的代码通过依赖注入(set方法)的方式设置缓存类型,比如内存缓存、sd卡缓存、双缓存;ImageLoader中声明Cache的接口类,set方法设置的对象都是Cache的子类;也就是多态;这样修改后,如果后期有其他缓存方式需要修改,完全不需要对源码修改,只需要添加一个新的Cache的实现类就可以,也就是对扩展开放,对修改是封闭的
里氏替换原则(Liskov Substitution Principle)——构建扩展性更好的系统
  • 依赖继承、多态这两大特性。简单的说就是所有引用基类的地方必须能透明的是使用其子类的对象;
  • 上面小明通过提取Cache接口,使用依赖注入的方法设置缓存类型,传入Cache的子类(内存、sd卡、双缓存)的这种方式就是里氏替换原则
依赖倒置原则(Dependence Inversion Principle)——让项目拥有变化的能力
  • 是指一种特定的解耦形式,是的高层次的模块不依赖于低层次的模块的实现细节的目的,依赖模块被颠倒了
  • 上面小明通过提取Cache接口,使用依赖注入的方法设置缓存类型,传入Cache的子类(内存、sd卡、双缓存)的这种方式就是里氏替换原则;并且这样的话不会像修改前期那样,在ImageLoader中直接创建ImageCache对象,ImageLoader过度依赖低层次模块(ImageCache);将其抽取成接口,使用依赖注入的方式,这样就是依赖倒置原则
接口隔离原则(InterfaceSegregation Principles)——系统有更高的灵活性
  • 定义:客户端不应该依赖它不需要的接口。
  • 目的:系统解开耦合,从而容易重构、更改和重新部署
  • 小明设计的ImageLoader中的ImageCache就是接口隔离原则的运用,ImageLoader只需要知道该缓存对象有存、取缓存图片的接口即可,其他一概不管,这就使得缓存功能的具体实现对ImageLoader隐藏。这就是用最小化接口隔离了实现类的细节,也促使我们将庞大的接口拆分到更细粒度的接口当中,这使得我们的系统具有更低的耦合性,更高的灵活性。
迪米特原则(Law of Demeter)——更好的扩展性
  • 定义:一个类应该对自己需要耦合或者调用的类知道的最少,类的内部如何实现与调用者或者依赖者没关系,调用者或者依赖着只需要知道它需要的方法即可,其他的一概不用管。类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另外一个类的影响也越大。
  • 案例:房屋、中介、租客;改前 租客通过中介获取房屋资源,自己筛选符合条件的房屋;修改后租客直接调用中介的找房方法(传输价格和空间条件),中间根据条件找到合适的房屋返给租客就ok;

参考《Android 源码设计模式解析与实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值