Demo Code
#if 0
class Color{
public:
string m_name;
};
class Black : public Color{
public:
Black(){
m_name = "Black";
}
};
class White : public Color{
public:
White(){
m_name = "White";
}
};
class Sofa{
public:
string m_name;
};
class LeatherSofaBlack : public Sofa{
Black m_color;
public:
LeatherSofaBlack(){
m_name = "LeatherSofa " + m_color.m_name;
}
};
class LeatherSofaWhite : public Sofa{
White m_color;
public:
LeatherSofaWhite(){
m_name = "LeatherSofa " + m_color.m_name;
}
};
class ClothSofaBlack : public Sofa{
Black m_color;
public:
ClothSofaBlack(){
m_name = "ClothSofa " + m_color.m_name;
}
};
class ClothSofaWhite : public Sofa{
White m_color;
public:
ClothSofaWhite(){
m_name = "ClothSofa " + m_color.m_name;
}
};
class House{
LeatherSofaBlack m_sofa;
public:
void display(){
cout << "I have a " << m_sofa.m_name.c_str() << endl;
}
};
#else
class Color{
public:
string m_name;
};
class Black : public Color{
public:
Black(){
m_name = "Black";
}
};
class White : public Color{
public:
White(){
m_name = "White";
}
};
class Sofa{
public:
string m_name;
};
class LeatherSofa : public Sofa{
public:
LeatherSofa(){
m_name = "LeatherSofa";
}
};
class ClothSofa : public Sofa{
public:
ClothSofa(){
m_name = "ClothSofa";
}
};
class House{
LeatherSofa m_sofa;
White m_sofa_color;
public:
void display(){
cout << "I have a " << m_sofa.m_name.c_str() \
<< " " << m_sofa_color.m_name.c_str() << endl;
}
};
#endif
void test_main_bridge(void){
House h;
h.display();
}
Demo Result
I have a LeatherSofa White
Summary
Point1 这里可以想象如果两个类存在的依赖关系,被依赖的类的变动必然导致另一个类需要做对应的调整
Point2 请将类定义得尽量单纯,将关联工作交给真正需要尽力依赖关系的类
Thanks For Watching, Have a nice day!