面向对象之接口隔离原则

一.简称

英文全称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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,155评论 19 139
  • 本文出自《Android源码设计模式解析与实战》中的第一章。 1、优化代码的第一步——单一职责原则 单一职责原则的...
    MrSimp1e0阅读 5,809评论 1 13
  • 单一职责原则 (SRP) 全称 SRP , Single Responsibility Principle 单一职...
    米莉_L阅读 5,750评论 2 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,448评论 18 399
  • 尹新月走后,厨房里的气氛十分的低沉。小葵默默地走了过去,收拾起那碎了一地的带着碎片的猪肉炖粉条。 怕是碎的不是那做...
    卿浅墨阅读 5,107评论 0 9

友情链接更多精彩内容