面向对象六大原则----imageLoader为例层层优化
2016-11-05 19:59
183 查看
本片文章依托于项目
https://github.com/libin7278/ImageLoaderCourse.git
可以先下载,然后结合本博客可以更加深入了解面试对象六大原则,从而走进优化代码之路。
核心:里氏替换原则核心是抽象,抽象有依赖于继承
优点:①代码重用,减少创建类
②子类父类像,但是又有区别
③提高代码可扩展性
缺点:①继承是侵入性,只要继承就要必须拥有父类的所有属性和方法
②可能早晨子类代码冗余,灵活性降低
从上面可以看出来,Windows依赖于View,View定义了一个抽象视图,measure是各个子类共享的方法,子类复写View的draw方法实现各自特色的功能。这里任何集成View的类都可以设置给show类。
①高层模块不依赖于低层模块,两者都应该依赖于抽象
②抽象不应该依赖细节
③细节应该依赖抽象
目的:系统解开耦合。
**Bob大叔在上个21世纪将以上五个原则定义为SOLID原则。
不然耦合越深,当一个类发生变化时候,会引起另一个的变化。
https://github.com/libin7278/ImageLoaderCourse.git
可以先下载,然后结合本博客可以更加深入了解面试对象六大原则,从而走进优化代码之路。
单一职责原则(SRP)
定义:一个类中应该只有一个引起他变化的原因,简单来说一个类中应该是一组相关性很高的函数,数据的封装。/** * 单一职责原则 * 把各个功能独立出来 * 两个完全不一样的功能就不应该放在一个类里面, * 一个类应该是一组相关性很高的函数、数据的封装。 */
开闭原则(OCP)
/** * 开闭原则 * 1. * 通过内存每次来从网络加载图片是一个问题,安卓应用内存很有限,且具有易失性, * 重启之后之前加载的就会消失,还要重新再下载。导致运行缓慢,消耗内存。 * 所以接下要考虑缓存SD卡。 * 2. * 软件中的对象(模块,类,函数)应该对于扩展是开放的,但对于修改是封闭的 * 3. * 首先,缓存应该优先使用内存缓存,如果内存缓存没有再使用SD卡缓存,如果SD卡也没有才去网络获取。 * 然后在内存和SD卡上都缓存一份 * 4. * 整体思路每一个类单独处理一个一个事件,通过get set方法设置 * * 5. * 为了使imageloader不臃肿,每次不必都更改imageloader,增加可扩展性,所以我们在设计的时候就应该考虑到 * 通过扩展的方式来实现变化,而不是通过每次来更改imageLoader来实现。 * * 6. * 通过setImageCache()方法注入不同的缓存实现,这样不仅能够使Imageloader更简单,健壮。 * 当需要新建一个实现ImagerLoader接口的类,通过setImageCache注入到ImageLoader中。 */
里氏替换原则(LSP)
定义:所有引用基类的地方必须能透明的使用子类的对象核心:里氏替换原则核心是抽象,抽象有依赖于继承
优点:①代码重用,减少创建类
②子类父类像,但是又有区别
③提高代码可扩展性
缺点:①继承是侵入性,只要继承就要必须拥有父类的所有属性和方法
②可能早晨子类代码冗余,灵活性降低
//窗口类 public class Window{ public void show(View child){ child.draw(); } } //建立视图,抽象,测量视图宽高,绘制交给子类实现 public abstract class View{ public abstract void draw(); public void measure(int weight,int height){ } } //按钮具体实现 public void Button extends View{ public void draw(){ } }
从上面可以看出来,Windows依赖于View,View定义了一个抽象视图,measure是各个子类共享的方法,子类复写View的draw方法实现各自特色的功能。这里任何集成View的类都可以设置给show类。
依赖倒置原则(DIP)
依赖倒置关键点:①高层模块不依赖于低层模块,两者都应该依赖于抽象
②抽象不应该依赖细节
③细节应该依赖抽象
接口隔离原则(ISP)
定义:客户端不应该依赖不需要的接口,也就是类间的依赖关系应该建立在最小的接口上,接口隔离则是将非常庞大,臃肿的接口拆分成更小,更具体的接口;目的:系统解开耦合。
**Bob大叔在上个21世纪将以上五个原则定义为SOLID原则。
迪米特原则(LOD)
LOD也称最少只是原则:一个对象应该对其他对象有最少的了解。就是两个相关类只需要知道调用方法即可,至于怎么调,怎么用,怎么实现这些都不去知道。不然耦合越深,当一个类发生变化时候,会引起另一个的变化。
相关文章推荐
- 面向对象的六大原则(二)-- 开闭原则(切合Android,ImageLoader)
- 面向对象的六大原则-以ImageLoader为例
- 面向对象六大原则----单一职责原则
- 面向对象六大原则
- 面向对象六大原则随记
- 面向对象六大原则
- 面向对象六大原则----接口隔离原则,迪米特原则
- 面向对象六大原则
- 【设计模式】 面向对象六大设计原则
- 面向对象六大原则(六):开闭原则
- Java代码优化六大原则
- 面向对象六大原则(上)
- 面向对象的六大原则
- 面向对象六大原则
- 面向对象六大原则----开闭原则
- 面向对象的六大原则
- 面向对象的六大原则
- 面向对象的六大设计原则(基于Volley框架分析)
- Android设计模式-面向对象六大原则
- 面向对象的六大原则(原则都是唬人 关键在于理解面向对象)