接口隔离原则(Interface Segregation Principle)
1.基本介绍
客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上。
2.代码对比
(1) 新建一个画画接口:
/**
* @ClassName Draw
* @description 画画接口
*/
public interface Draw {
/**
* usePen : 使用钢笔
*/
void usePen();
/**
* usePaper : 使用纸
*/
void usePaper();
/**
* drawBorder : 画边框
*/
void drawBorder();
/**
* drawFull : 填充内容
*/
void drawFull();
}
(2) 画圆形实现类:
/**
* @ClassName DrawCirCle
* @description 画圆形
*/
public class DrawCirCle implements Draw {
@Override
public void usePen() {
System.out.println("画圆: 使用钢笔!");
}
@Override
public void usePaper() {
System.out.println("画圆: 使用纸!");
}
@Override
public void drawBorder() {
System.out.println("画圆: 画圆圈边框!");
}
@Override
public void drawFull() {
System.out.println("画圆: 将圆填充黑色!");
}
}
(3) 画正方形实现类:
/**
* @ClassName DrawSquare
* @description 画正方形
*/
public class DrawSquare implements Draw {
@Override
public void usePen() {
System.out.println("画正方形: 使用钢笔!");
}
@Override
public void usePaper() {
System.out.println("画正方形: 使用纸!");
}
@Override
public void drawBorder() {
System.out.println("画正方形: 画正方形边框!");
}
@Override
public void drawFull() {
System.out.println("画正方形: 将正方形填充黑色!");
}
}
(4) 新建类画图形1
/**
* @ClassName DrawPic1
* @description 画图形1类:一个圆圈
*/
public class DrawPic1 {
public void doDrawPic1(Draw draw){
draw.usePen();
draw.usePaper();
draw.drawBorder();
}
}
(5) 新建类画图形2
/**
* @ClassName DrawPic2
* @description 画图形2类:一个实心正方形
*/
public class DrawPic2 {
public void doDrawPic2(Draw draw){
draw.usePen();
draw.usePaper();
draw.drawBorder();
draw.drawFull();
}
}
(6) 使用上面的两个画图类
public class DrawPicMain {
public static void main(String[] args) {
// 画一个圆圈
DrawPic1 drawPic1 = new DrawPic1();
drawPic1.doDrawPic1(new DrawCirCle()); // DrawPic1类通过接口Draw依赖(使用)DrawCirCle类
// 画一个实心正方形
DrawPic2 drawPic2 = new DrawPic2();
drawPic2.doDrawPic2(new DrawSquare());
}
}
这几个类的关系图为:
可以发现,画图形1:圆圈DrawPic1类通过接口依赖(使用)画圆形DrawCircle类,但是只使用了纸、笔、画边框三个方法,画圆形DrawCircle类中的实现的填充内容方法就没有用到,这就是不符合接口隔离原则。
按照接口隔离原则的设计应为:
即:一个类对另一个类的依赖(依赖),应该建立在最小的接口上。即把大接口拆成多个接口进行隔离。