C++桥接模式(Bridge)

博客介绍了C++桥接模式,给出UML类图。桥接模式将抽象部分与实现部分分离,使它们能独立变化,子类可任意聚合。还阐述了其好处,包括抽象和实现分离、有优秀扩展能力、实现细节对客户透明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UML类图(仅供参考)如下:

桥接模式解决的问题:

抽象类之间为聚合关系,将抽象部分与实现部分分离,使它们都可以独立的变化,这样他们的子类就可以任意聚合在一起

源码

#include <iostream>

// 抽象类,桥的一部分
class CAbstractionImplement
{
public:
	virtual ~CAbstractionImplement() {}

	// 定义接口,表示该类所支持的操作
	virtual void Operation() = 0;

protected:
	CAbstractionImplement() {}
};

// 具体实现A
class CConcreteAbstractionImplementA :public CAbstractionImplement
{
public:
	virtual void Operation()
	{
		std::cout << "CConcreteAbstractionImplementA::Operation" << std::endl;
	}
};

// 具体实现B
class CConcreteAbstractionImplementB :public CAbstractionImplement
{
public:
	virtual void Operation()
	{
		std::cout << "CConcreteAbstractionImplementB::Operation" << std::endl;
	}
};

// 抽象类,桥的另一部分
class CAbstraction
{
public:
	virtual ~CAbstraction() {}

	// 定义接口,表示该类所支持的操作
	virtual void Operation() = 0;

protected:

	CAbstraction(CAbstractionImplement* imp) :_imp(imp) {}

	// CAbstraction与CAbstractionImplement为聚合
	// 这样他们的子类可以以任何方式组合,从而实现桥接模式
	CAbstractionImplement *_imp;
};

// 具体实现A
class CRefinedAbstractionA :public CAbstraction
{
public:
	CRefinedAbstractionA(CAbstractionImplement* imp) :CAbstraction(imp) {}

	virtual void Operation()
	{
		std::cout << "CRefinedAbstractionA::Operation" << std::endl;
		this->_imp->Operation();
	}
};

// 具体实现A
class CRefinedAbstractionB :public CAbstraction
{
public:
	CRefinedAbstractionB(CAbstractionImplement* imp) :CAbstraction(imp) {}

	virtual void Operation()
	{
		std::cout << "CRefinedAbstractionB::Operation" << std::endl;
		this->_imp->Operation();
	}
};

// 测试
int main()
{
	CAbstractionImplement* imp = new CConcreteAbstractionImplementA();
	CAbstraction* abs = new CRefinedAbstractionA(imp);
	abs->Operation();

	std::cout << "-----------------------------------------" << std::endl;

	CAbstractionImplement* imp1 = new CConcreteAbstractionImplementB();
	CAbstraction* abs1 = new CRefinedAbstractionA(imp1);
	abs1->Operation();

	std::cout << "-----------------------------------------" << std::endl;

	CAbstractionImplement* imp2 = new CConcreteAbstractionImplementA();
	CAbstraction* abs2 = new CRefinedAbstractionB(imp2);		
	abs2->Operation();

	std::cout << "-----------------------------------------" << std::endl;

	CAbstractionImplement* imp3 = new CConcreteAbstractionImplementB();
	CAbstraction* abs3 = new CRefinedAbstractionB(imp3);
	abs3->Operation();
}

好处

1、抽象和实现的分离。

2、优秀的扩展能力。

3、实现细节对客户透明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值