[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 请将类定义得尽量单纯,将关联工作交给真正需要尽力依赖关系的类

Thanks For Watching, Have a nice day!

桥接模式和抽象工厂是两个不同的设计模式,但是可以结合使用。下面我来简单介绍一下如何在C++中实现桥接模式和抽象工厂。 首先,我们需要定义桥接模式中的抽象类和实现类。假设我们要实现一个图形库,可以绘制不同类型的图形,包括圆形、矩形和三角形。我们可以定义一个抽象类Shape,表示图形的基本属性和方法: ```cpp class Shape { public: virtual void draw() = 0; virtual ~Shape() {} }; ``` 然后,我们定义三个实现类,分别表示圆形、矩形和三角形: ```cpp class Circle : public Shape { public: void draw() override { cout << "Draw Circle." << endl; } }; class Rectangle : public Shape { public: void draw() override { cout << "Draw Rectangle." << endl; } }; class Triangle : public Shape { public: void draw() override { cout << "Draw Triangle." << endl; } }; ``` 接下来,我们需要实现桥接模式中的桥接类,它将抽象类和实现类进行桥接。假设我们要支持不同的绘制方式,包括OpenGL和DirectX。我们可以定义一个抽象类DrawAPI,表示绘制的基本属性和方法: ```cpp class DrawAPI { public: virtual void draw() = 0; virtual ~DrawAPI() {} }; ``` 然后,我们定义两个实现类,分别表示OpenGL和DirectX的绘制方式: ```cpp class OpenGLAPI : public DrawAPI { public: void draw() override { cout << "Draw using OpenGL." << endl; } }; class DirectXAPI : public DrawAPI { public: void draw() override { cout << "Draw using DirectX." << endl; } }; ``` 最后,我们需要使用抽象工厂来创建图形和绘制方式的组合。我们可以定义一个抽象工厂类AbstractFactory,表示图形和绘制方式的组合: ```cpp class AbstractFactory { public: virtual Shape* createShape() = 0; virtual DrawAPI* createDrawAPI() = 0; virtual ~AbstractFactory() {} }; ``` 然后,我们定义两个具体的工厂类,分别表示OpenGL和DirectX的图形和绘制方式的组合: ```cpp class OpenGLFactory : public AbstractFactory { public: Shape* createShape() override { return new Circle(); } DrawAPI* createDrawAPI() override { return new OpenGLAPI(); } }; class DirectXFactory : public AbstractFactory { public: Shape* createShape() override { return new Rectangle(); } DrawAPI* createDrawAPI() override { return new DirectXAPI(); } }; ``` 最后,我们可以使用这些类来绘制图形。例如,我们可以使用OpenGL和圆形来绘制一个图形: ```cpp AbstractFactory* factory = new OpenGLFactory(); Shape* shape = factory->createShape(); DrawAPI* api = factory->createDrawAPI(); api->draw(); shape->draw(); ``` 输出结果为: ``` Draw using OpenGL. Draw Circle. ``` 这就是桥接模式和抽象工厂在C++中的实现。通过使用桥接模式和抽象工厂,我们可以将抽象类和实现类进行解耦,从而实现更加灵活和可扩展的设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值