美文网首页
接口隔离原则

接口隔离原则

作者: wuchao226 | 来源:发表于2019-04-29 11:11 被阅读0次

    接口隔离原则定义:类间的依赖关系应该建立在最小的接口上。

    接口隔离原则将非常庞大、臃肿的接口拆分成更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。

    下面以一个示例来说明:我们在使用 OutputStream 或者其他可关闭对象之后,必须保证它们最终被关闭,开放 — 封闭原则中 SD 卡缓存类有这样的代码

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

    我们看到这段代码可读性非常差,各种 try...catch 嵌套都是些简单的代码,但是会严重影响,并且多层级的大括号很容易将代码写到错误的层级中。

    我们知道 Java 中有一个 Closeable 接口,该接口标识了一个可关闭对象,它只有一个 close 方法,如下图所示。

    屏幕快照 2019-09-02 17.22.59.png

    FileOutputStream 类就实现了这个接口,从图中可以看到,还有100多个类实现了 Closeable 这个接口,在关闭这 100多个类型对象时,都需要写出像 put 方法中 finally 代码段那样的代码。既然都实现了 Closeable 类,只要建一个方法统一来关闭这些对象即可。

    public final class CloseUtils {
        private CloseUtils() {
        }
    
        /**
         * 关闭 Closeable 对象
         * @param closeable 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 bitmap) {
            FileOutputStream fileOutputStream = null;
            try {
                fileOutputStream = new FileOutputStream(cacheDir + url);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, fileOutputStream);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }finally {
                CloseUtils.closeQuietly(fileOutputStream);
            }
        }
    

    代码简洁了很多,而且这个 closeQuietly 方法可以运用到各类可关闭的对象中,保证了代码的重用性。CloseUtils 的 closeQuietly 方法的基本原理就是依赖 Closeable 抽象而不是具体实现。

    相关文章

      网友评论

          本文标题:接口隔离原则

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