面向对象的六大原则之 —— 接口隔离原则
2016-03-01 18:18
302 查看
学习了何红辉、关爱民写的《Android设计模式》,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下
在《面向对象的六大原则之 —— 单一原则》中我们有如下代码:
修改代码:
为什么我们能这样做,因为在JDK1.6中,所有的流都实现依赖了Closeable接口,具体的实现都在实现了Closeable接口的子类中,所以,这也是依赖倒置原则,子类只需要做细节的事,其他都不关心,这其实就是接口隔离原则,在ImageLoader中的ImageCahce就是接口隔离的运用,我们将ImageCache抽象出来,ImageLoader只需要知道该图片是不是有缓存,没缓存我就去网上下载,不管缓存的具体实现,也就是具体的实现对ImageLoader是隐藏的,它看不到,这就是我们将ImageLoader这个类的作用拆分的更加细致化的结果,ImageLoader跟其他三个实现类都没有直接关系,也就降低了耦合度,自然灵活度就上升了。
单一原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则,其实是相辅相成的,他们同一时刻出现的时候,使得一个软件系统更新清晰、最大程度拥抱变化。
上一篇:《面向对象的六大原则之 —— 依赖倒置原则》
什么是接口隔离原则
接口隔离的目的就是将庞大的接口拆分成更小的或者说更具体的接口,使得系统的耦合度大大降低,从而容易重构、修改等在《面向对象的六大原则之 —— 单一原则》中我们有如下代码:
/** * 缓存到sd卡 * @param url 图片的url * @param bitmap bitmap对象 */ public void put(String url ,Bitmap bitmap){ FileOutputStream output = null; try { output = new FileOutputStream(cacheDir+url); bitmap.compress(Bitmap.CompressFormat.PNG,100,output); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { //无论是否有异常,都要关闭流 try { if(output!=null){ output.close(); } } catch (IOException e) { e.printStackTrace(); } } }这段代码的可读性我就不说了,各种try...catch,没办法,因为在操作完流之后,要关闭流,可是有没有发现,如果你在类中加入的可关闭对象过多的时候,你的关闭代码就写的到处都是,这明显让人很不爽,看看jdk1.6的API,所有流都实现了Closeable接口,代表着可关闭,既然是这样,我们就把Closeable封装一下:
import java.io.Closeable; import java.io.IOException; /** * Created by Administrator on 2016/3/1. */ public class CloseableUtil { public static void close(Closeable closeable){ try { if(closeable!=null){ closeable.close(); } } catch (IOException e) { e.printStackTrace(); } } }
修改代码:
/** * 缓存到sd卡 * @param url 图片的url * @param bitmap bitmap对象 */ public void put(String url ,Bitmap bitmap){ FileOutputStream output = null; try { output = new FileOutputStream(cacheDir+url); bitmap.compress(Bitmap.CompressFormat.PNG,100,output); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { CloseableUtil.close(output); } }发现嵌套的try去掉了,瞬间觉得舒服很多
为什么我们能这样做,因为在JDK1.6中,所有的流都实现依赖了Closeable接口,具体的实现都在实现了Closeable接口的子类中,所以,这也是依赖倒置原则,子类只需要做细节的事,其他都不关心,这其实就是接口隔离原则,在ImageLoader中的ImageCahce就是接口隔离的运用,我们将ImageCache抽象出来,ImageLoader只需要知道该图片是不是有缓存,没缓存我就去网上下载,不管缓存的具体实现,也就是具体的实现对ImageLoader是隐藏的,它看不到,这就是我们将ImageLoader这个类的作用拆分的更加细致化的结果,ImageLoader跟其他三个实现类都没有直接关系,也就降低了耦合度,自然灵活度就上升了。
单一原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则,其实是相辅相成的,他们同一时刻出现的时候,使得一个软件系统更新清晰、最大程度拥抱变化。
上一篇:《面向对象的六大原则之 —— 依赖倒置原则》
相关文章推荐
- [Andriod Monkey测试] Monkey黑/白名单
- js实现类似于百度学术的高级检索功能
- 域名绑定和域名解析(DNS)有什么不同?(转载)
- 2016年3月1号【Vim写了个小作业,不知道保存到哪了,怎么办?】
- UICollectionView的使用(一)
- 论文素材搜集
- iOS开发--UIView中的坐标转换
- ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
- UVa 836 - Largest Submatrix
- 【opencv】图像细化
- 另一种dump bootimg(zImage)的方法
- Linux任务前后台的切换
- 【Educational Codeforces Round 6A】【水题】Professor GukiZ's Robot 曼哈顿距离
- 添加页面切换动画, 避免冷启动
- 判断一个文本文件的编码格式
- 申请 SSL 证书 并且配置 iis 启用https协议
- 安装mariadb galera 10.0.22(二进制)
- 【小镇的技术天梯】黑客技术(1) MITM-中间人攻击
- Jstl标签的使用
- 二:Storm的配置项说明