设计模式之接口隔离原则C++实现

2022-06-16 14:36:05 浏览数 (1)

接口隔离原则: 将臃肿庞大的接口拆分成更小的和更具体的接口。

实现方法:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

具体说明:类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;
}

结果显示:


0 人点赞