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

2022-06-16 14:35:37 浏览数 (1)

本篇文章特别感谢:胡前辈的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;
}

结果显示:

bug

0 人点赞