接口隔離原則: 将臃腫龐大的接口拆分成更小的和更具體的接口。
實作方法:要為各個類建立它們需要的專用接口,而不要試圖去建立一個很龐大的接口供所有依賴它的類去調用。
具體說明:類A通過接口I依賴類B,類C通過接口I依賴類D,如果接口I對于類A和類B來說不是最小接口,則類B和類D必須去實作他們不需要的方法。
改進方法:将臃腫的接口I拆分為獨立的幾個接口,類A和類C分别與他們需要的接口建立依賴關系。
具體示例:建立一個學生管理系統
第一步:輸入接口
//輸入子產品接口
class InputModule
{
public:
virtual void insert()=0;
virtual void _delete()=0;
virtual void modify()=0;
};
複制
第二步:統計接口
//統計子產品接口
class CountModule
{
public:
virtual void countTotalScore()=0;
virtual void countAverage()=0;
};
複制
第三步:輸出接口
//列印子產品接口
class PrintModule
{
public:
virtual void printInfo()=0;
virtual void queryInfo()=0;
};
複制
第四步:接口實作
//實作類
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;
}
};
複制
第五步:主函數實作
#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;
}
複制
結果顯示: