面向对象六大原则(五):接口隔离原则

一、概述

接口隔离原则( Interface Segregation  Principle ,缩写:ISP),客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。

二、原则

使用多个专门的接口比使用单一的总接口要好。

一个类对另外一个类的依赖性应当是建立在最小的接口上的。

一个接口代表一个角色,不应当将不同的角色都交给一个接口。没有关系的接口合并在一起,形成一个臃肿的大接口,这是对角色和接口的污染。

“不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”;再通俗点讲,不要强迫客户使用她们不用的方法,如果强迫用户使用她们不使用的方法,那么这些客户就会面临由于这些不使用的方法的改变所带来的改变。

三、举例说明

下面引用《Android源码设计模式解析与实战》一书中示例:

1.在使用了OutputStream或者其他可关闭的对象后,我们必须保证它们最终被关闭了,因此SD卡缓存类中就有如下代码:

//将图片缓存到内存中
    public void put(String url, Bitmap bmp){
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(cacheDir + url);
            bmp.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }finally {
            if(fileOutputStream != null){
                try{
                    fileOutputStream.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }//end if
        }// end if finally
    }

2.上述代码中可读性非常差,各种try...catch嵌套,我们知道Java中有个Closeable接口( 点击打开链接),该接口标识了一个可关闭的对象,它只有一个close方法,于是就有如下CloseUtils工具类的产生

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

运用到put方法代码如下:

    //将图片缓存到内存中
    public void put(String url, Bitmap bmp){
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(cacheDir + url);
            bmp.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
        }catch (FileNotFoundException e){
            e.printStackTrace();
        }finally {
            CloseUtils.closeQuietly(fileOutputStream);
        }
    }

该closeQuietly方法可以运用到各类可关闭的对象中,保证了代码的重用性,该方法的基本原理就是依赖于Closeable抽象而不是具体实现(依赖倒置原则),并且建立在最小化依赖原则的基础上,它只需要知道这个函数是可关闭的,其他的一概不关心,也就是这里的接口隔离原则。

四、分析 

Robert C Martin在21世纪早期将  单一职责 、 开闭原则 、 里氏替换 、接口隔离以及 依赖倒置(依赖反转) 5个原则定义为SOLID原则,作为面向对象编程的5个基本原则。当这些原则被一起应用时,它们使得一个软件系统更清晰、简单,最大程度地拥抱变化。

SOLID原则最终可以简化为几个关键词:抽象、单一、职责、最小化。   
           

你可能感兴趣的:(Android设计模式)