接口隔离原则: 将臃肿庞大的接口拆分成更小的和更具体的接口。
实现方法:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。
具体说明:类A通过接口I依赖类B,类C通过接口I依赖类D,如果接口I对于类A和类B来说不是最小接口,则类B和类D必须去实现他们不需要的方法。
改进方法:将臃肿的接口I拆分为独立的几个接口,类A和类C分别与他们需要的接口建立依赖关系。
具体示例:建立一个学生管理系统
第一步:输入接口
代码语言:javascript复制//输入模块接口
class InputModule
{
public:
virtual void insert()=0;
virtual void _delete()=0;
virtual void modify()=0;
};
第二步:统计接口
代码语言:javascript复制//统计模块接口
class CountModule
{
public:
virtual void countTotalScore()=0;
virtual void countAverage()=0;
};
第三步:输出接口
代码语言:javascript复制//打印模块接口
class PrintModule
{
public:
virtual void printInfo()=0;
virtual void queryInfo()=0;
};
第四步:接口实现
代码语言:javascript复制//实现类
class StuScore:public InputModule,CountModule,PrintModule
{
private:
StuScore(){}
public:
static InputModule* getInputModule()
{
InputModule *Input=new StuScore();
return Input;
}
static CountModule* getCountModule()
{
CountModule *Count=new StuScore();
return Count;
}
static PrintModule* getPrintModule()
{
PrintModule *Print=new StuScore();
return Print;
}
void insert()
{
cout<<"输入模块增加!"<<endl;
}
void _delete()
{
cout<<"输入模块删除!"<<endl;
}
void modify()
{
cout<<"输入模块修改!"<<endl;
}
void countTotalScore()
{
cout<<"统计模块统计总分"<<endl;
}
void countAverage()
{
cout<<"统计模块统计平均分"<<endl;
}
void printInfo()
{
cout<<"打印模块打印信息"<<endl;
}
void queryInfo()
{
cout<<"打印模块查询系列"<<endl;
}
};
第五步:主函数实现
代码语言:javascript复制#include "st.h"
int main()
{
InputModule *input=StuScore::getInputModule();
CountModule *count=StuScore::getCountModule();
PrintModule *print=StuScore::getPrintModule();
input->insert();
count->countTotalScore();
print->printInfo();
return 0;
}
结果显示: