美文网首页
面向对象之接口隔离原则

面向对象之接口隔离原则

作者: 飞奔的小马 | 来源:发表于2017-07-09 09:55 被阅读16次
    一.简称

    英文全称InterfaceSegregation Principles,缩写是ISP。

    二.定义

    一种定义是:客户端不应该依赖于它不需要的接口;另一种定义是类间的依赖关系应该建立在最小的接口上。

    三.问题

    比如当我们用到流的时候,在最后都要做关闭操作,我们既要判断非空操作,又要try...catch,写一串代码,如果只用到一个类还好,要是类多的话,就要写很多了,是可忍孰不可忍。

    四.解决

    既然都要实现了Closeable接口,那么只要建立一个统一的方法来关闭这些对象就行了
    举例

    public void put (String url,Bitmap bitmap){
            FileOutputStream fileOutputStream =null;
            try {
                fileOutputStream =new FileOutputStream(cacheDir + url);
                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中有多层级的大括号,很容易将代码写到错误的层级中,如果有很多类都需要关流操作,那么每个类都要写这么多代码,想必也是挺烦人的,怎么解决呢?既然要实现Closeable接口,那就可以创建一个方法统一来关流。

    public final class CloseUtil{
                private CloseUtil(){}
         public static void closeQuietly(Closeable closeable){
            if(null!=closeable){
                try{
                    closeable.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    } 
    

    把关流的方法应用到put方法中:

    public void put (String url,Bitmap bitmap){
            FileOutputStream fileOutputStream =null;
            try {
                fileOutputStream =new FileOutputStream(cacheDir + url);
                bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);
            }catch (Exception e){
                e.printStackTrace();
            }finally {
               CloseUtil.closeQuitely(fileOutputStream);
            }
        }
    

    代码瞬间清晰了好多,依赖于Closeable抽象而不是具体实现,并且建立在最小化依赖原则的基础上,只需要知道这个对象是可关闭的,其他的不需要担心,即接口隔离原则。

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

    总结:

    接口隔离优点:
    (1)简洁代码
    (2)接口最小化
    (3)增加灵活性

    baby.jpg

    相关文章

      网友评论

          本文标题:面向对象之接口隔离原则

          本文链接:https://www.haomeiwen.com/subject/fodshxtx.html