[C++][Demo]橋接模式

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 請將類定義得儘量單純,將關聯工作交給真正需要盡力依賴關係的類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章