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