天天看點

設計模式之接口隔離原則C++實作

接口隔離原則: 将臃腫龐大的接口拆分成更小的和更具體的接口。

實作方法:要為各個類建立它們需要的專用接口,而不要試圖去建立一個很龐大的接口供所有依賴它的類去調用。

具體說明:類A通過接口I依賴類B,類C通過接口I依賴類D,如果接口I對于類A和類B來說不是最小接口,則類B和類D必須去實作他們不需要的方法。

設計模式之接口隔離原則C++實作

改進方法:将臃腫的接口I拆分為獨立的幾個接口,類A和類C分别與他們需要的接口建立依賴關系。

設計模式之接口隔離原則C++實作

具體示例:建立一個學生管理系統

設計模式之接口隔離原則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;
}           

複制

結果顯示:

設計模式之接口隔離原則C++實作