前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之接口隔离原则C++实现

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

作者头像
用户9831583
发布2022-06-16 14:36:05
4540
发布2022-06-16 14:36:05
举报
文章被收录于专栏:码出名企路

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

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

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

结果显示:


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码出名企路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档