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

设计模式之迪米特法则C++实现

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

本篇文章特别感谢:胡前辈的bug指导

开始

迪米特法则:只与你的直接朋友交谈,不跟“陌生人”说话。

“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象同当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

应用场景:如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。

具体示例:明星与经纪人的关系实例。

分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人。

第一步:非朋友类

代码语言:javascript
复制
class Star
{
    public:
        Star(){}
        Star(string name){this->name=name;}
        string getName(){return name;}

    private:
        string name;
};
代码语言:javascript
复制
//粉丝类
class Fans
{
    public:
        Fans(){}
        Fans(string name){this->name=name;}
        string getName(){return name;}

    private:
        string name;
};
代码语言:javascript
复制
//媒体类
class Commpany
{
    public:
        Commpany(){}
        Commpany(string name){this->name=name;}
        string getName(){return name;}

    private:
        string name;
};

第二步:朋友类

代码语言:javascript
复制
class Agent
{
    
    public:
        Agent(){}
      
        void setStar(Star *myStar){this->myStar=myStar;}
        void setFans( Fans *myFans){this->myFans =myFans;}
        void setCommpany(Commpany *myCommpany){
                this->myCommpany=myCommpany;}

        void meeting()
        {
            cout<<myFans->getName()<<" 与明星 "<<myStar->getName()
                    <<" 见面了 "<<endl;
        }

        void business()
        {
            cout<<myCommpany->getName()<<" 与明星 "<<myStar->getName()
                    <<" 洽谈业务"<<endl;
        }

        private:
            Star *myStar=new Star();
            Fans *myFans=new Fans();
            Commpany *myCommpany=new Commpany();

};

第三步:主函数实现

代码语言:javascript
复制
int main()
{    
    //如果Agent不写默认构造函数,会报未定义的引用错误
      Agent *agent=new Agent();
      
     Star *myStar=new Star("周杰伦");
     Fans *myFans=new Fans("李一一");
    Commpany *myCommpany=new Commpany("中国传媒公司");

      agent->setStar(myStar);
     agent->setFans(myFans);
     agent->setCommpany(myCommpany);
      agent->meeting();
      agent->business();

    return 0;
}

结果显示:

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

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

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

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

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