面向对象设计6大原则之五(接口隔离原则)-系统有更高的灵活性

接口隔离原则,客户端不应该依赖它不需要的接口。另一种解释是:类间的依赖关系应该建立在最小的接口上。接口隔离原则将非常庞大、臃肿的接口拆分成更小的和更具体的接口,这样客户将会只需要知道它们感兴趣的方法。接口隔离原则的目的是系统解开耦合,从而容易重构、更改和重新部署。

接口隔离原则说白了就是,让客户端依赖的接口尽可能地小。

例子代码如下:

//将图片缓存到内存中
    public void put(String url,Bitmap bmp){
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(url);
            bmp.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);
        }catch (Exception e){
            e.printStackTrace();
        } finally {
            if (fileOutputStream != null){
                try{
                    fileOutputStream.close();
                }catch (Exception e){
                    e.printStackTrace();
                }
            }
        }
    }
这是以前写的代码,如果有100多个要关闭的对象怎么办,岂不是要写很多这样繁琐的代码,而且有try-catch语句,可读性比较差。由于很多需要关闭的对象实现了closeable接口,那建一个统一的方法来关闭这些就行了。代码如下:

public final class CloseUtils{
    private CloseUtils(){}
    //关闭Closeable对象
    public static void closeQuietly(Cloneable closeable){
        if (null != closeable){
            try{
                closeable.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
运用方法,代码如下:

public void put(String url,Bitmap bmp){
        FileOutputStream fileOutputStream = null;
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(url);
            bmp.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);
        }catch (Exception e){
            e.printStackTrace();
        } finally {
           CloseUtils.closeQuietly(fileOutputStream);
        }
    }
代码简洁了好多,而且closeQuietly方法可以运用到各类可关闭的对象中,保证代码的重用性。closeQuietly的方法基本原理就是依赖于Closeable抽象而不是具体实现(依赖倒置原则),并且建立在最小化依赖原则的基础上,它只需要知道这个类是可关闭,其他的一概不关心,也就是这里的接口隔离原则。将接口最小化隔离实现了类的细节,也促使我们将庞大的接口拆分到更细粒度的接口当中,这使得我们的系统具有更低的耦合性,更高的灵活性。

最近目前这5大原则可言化为这几个关键词:抽象、单一职责、最小化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值