接口隔离原则
定义:一个类对另一个类的依赖应该建立在最小的接口上
接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,但两者是不同的:
单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离。
单一职责原则主要是约束类,它针对的是程序中的实现和细节;接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建。
例 学生成绩管理程序
分析:学生成绩管理程序一般包含
插入成绩、删除成绩、修改成绩、计算总分、计算均分、打印成绩信息、査询成绩信息
等功能,如果将这些功能全部放到一个接口中显然不太合理,
正确的做法是将它们分别放在输入模块、统计模块和打印模块等 3 个模块中。
UML图如下
三个类分别为
//统计模块接口
public interface CountModule {
void countTotalScore();
void countAverage();
}
//输入模块接口
public interface InputModule {
void insert();
void delete();
void modify();
}
//打印模块接口
public interface PrintModule {
void printStuInfo();
void queryStuInfo();
}
// 实现类
public class StuScoreList implements InputModule, CountModule, PrintModule {
private StuScoreList() {
}
public static InputModule getInputModule() {
return (InputModule) new StuScoreList();
}
public static CountModule getCountModule() {
return (CountModule) new StuScoreList();
}
public static PrintModule getPrintModule() {
return (PrintModule) new StuScoreList();
}
@Override
public void insert() {
System.out.println("输入模块的insert()方法被调用!");
}
@Override
public void delete() {
System.out.println("输入模块的delete()方法被调用!");
}
@Override
public void modify() {
System.out.println("输入模块的modify()方法被调用!");
}
@Override
public void countTotalScore() {
System.out.println("统计模块的countTotalScore()方法被调用!");
}
@Override
public void countAverage() {
System.out.println("统计模块的countAverage()方法被调用!");
}
@Override
public void printStuInfo() {
System.out.println("打印模块的printStuInfo()方法被调用!");
}
@Override
public void queryStuInfo() {
System.out.println("打印模块的queryStuInfo()方法被调用!");
}
}
// 使用
public class Main {
public static void main(String[] args) {
InputModule input = StuScoreList.getInputModule();
CountModule count = StuScoreList.getCountModule();
PrintModule print = StuScoreList.getPrintModule();
input.delete();
count.countAverage();
print.queryStuInfo();
}
}
运行结果
参考资料:
1.http://c.biancheng.net/view/1330.html
代码地址:https://gitee.com/zhoujie1/design-mode-and-principle.git