浅析面对对象 六大原则(五)

来源:互联网 发布:oracle数据库代理商 编辑:程序博客网 时间:2024/05/17 07:53

1.单一职责原则点击跳转

2.开闭原则点击跳转

3.里氏替换原则点击跳转

4.依赖倒置原则点击跳转

5.接口隔离原则(让系统具有更高的灵活性)

接口隔离原则的英文全称是InterfaceSegregation Principles,缩写为ISP,定义为:系统不应该依赖他不需要的接口,另一种描述为,类间的依赖关系应该建立在最小的接口上。接口隔离原则是将庞大臃肿的接口拆分成数个功能单一或者更为具体的小接口,这样就可以保证让客户端自己选择自己所需要的接口,而摒弃那些不需要的接口。接口隔离原则的目的就是为了将系统解开耦合,从而更加容易重构,更改和部署。

在Java 6以及之前的版本,我们经常会碰到一个非常讨厌的问题,就是那就是在使用了OutputStream或者其他可以关闭的对象之后,我们必须要保证它最终被关闭了,所以,在之前讲的SD卡缓存中就有这样的代码。

public void putBitmap(String key, Bitmap bitmap) {        FileOutputStream fileOutputStream = null;        try {            fileOutputStream = new FileOutputStream(cacheDir + key);            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);        } catch (Exception e) {            e.printStackTrace();        } finally {            if (fileOutputStream != null) {                try {                    fileOutputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

可以从上述代码中看到,各种的try…catch之间的嵌套,而且嵌套的又都是些相对简单的代码,但是这样编写代码会严重的影响代码的可读性,并且多层级的大括号容易将代码引入到错误的层级中。但是这样子有什么好的处理方式吗?对的,在java中,有一个Closeable接口,该接口标识了一个可以关闭的对象,它只有一个close方法。在JAVA介绍Closeable接口的时候,有很多相关的类都实现了此接口,其中就包括FileOutputStream。所以,我们可以将实现Closeable接口的相关类进行优化处理,如下:

public class CloseUtils {    private CloseUtils(){}    /**     * 关闭Closeable对象     * @param closeable     */    public static void closeQuietly(Closeable closeable){        if (null != closeable){            try{                closeable.close();            }catch (IOException e){                e.printStackTrace();            }        }    }}

然后在将CloseUtils使用到SD卡缓存中,修改后的代码如下:

public void putBitmap(String key, Bitmap bitmap) {        FileOutputStream fileOutputStream = null;        try {            fileOutputStream = new FileOutputStream(cacheDir + key);            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);        } catch (Exception e) {            e.printStackTrace();        } finally {            CloseUtils.closeQuietly(fileOutputStream);        }    }

可以看到,上述代码较之前少了一层嵌套,代码也相对简洁了不少,而且这个closeQuitely()方法,不仅仅可以应用在这里,还有很多地方都可以应用的到,保证了代码的重用性,而此方法主要的实现原则就是依赖于Closeable接口的抽象性,并且建立在最小依赖原则的基础上,它只需要知道这个对象是不是可以关闭的就好,其余的一概不管。

BoB大叔(Robert C Martin)在21世纪,将单一职责、开闭原则、里氏替换、接口隔离以及依赖倒置5个原则定义为SOLID原则,作为OOP的5个基本原则,当这些原则一起被应用到一个系统中时,它们将使这个系统更加的清晰,简单,并且最大程度的适应变化,SOLID被典型的应用到测试驱动开发上,并且是敏捷开发以及自适应软件开发的重要基本原则。。