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

时间:2022-08-19 17:26:06

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

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

例子代码如下:

//将图片缓存到内存中
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大原则可言化为这几个关键词:抽象、单一职责、最小化。