c++设计模式之桥接模式

本文介绍桥接模式的概念及其应用场景,通过实例演示了如何通过桥接模式降低类与类之间的耦合,实现不同维度的变化,提供了具体的C++代码实现。

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

桥接模式(Bridge Pattern)

定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。
桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。

举例:

拿汽车在路上行驶的来说。既有小汽车又有公共汽车,它们都不但能在市区中的公路上行驶,也能在高速公路上行驶。这你会发现,对于交通工具(汽车)有不同的类型,它们所行驶的环境(路)也有不同类型,在软件系统中就要适应两个方面(不同车型,不同道路)的变化,怎样实现才能应对这种变化呢?
再次举一个例子,汽车和发动机,发动机有很多种4400cc,4500cc等等,汽车也有很多种bmw5,bmw6等等,不同的汽车可以安装不同的发动机。

概述:

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式。

意图: 

将抽象部分与实现部分分离,使它们都可以独立的变化。——《设计模式》GOF 

桥接模式的类结构图:


兑现代码:

#include <iostream>
#include <string>
using namespace std;

class Engine
{
public:
	virtual void showEngine()=0;
};
class Engine4400cc:public Engine
{
public:
	void showEngine()
	{
		cout<<"我是4400cc发动机"<<endl;
	}
};
class Engine4500cc:public Engine
{
public:
	void showEngine()
	{
		cout<<"我是4500cc发动机"<<endl;
	}
};
class Car
{
public:
	Car(Engine*engine)
	{
		this->m_engine=engine;
	}
	virtual void InstallEngine()=0;
protected:
	Engine*m_engine;
};
class BMW5:public Car
{
public:
	BMW5(Engine*engine):Car(engine)
	{
	
	}
	virtual void InstallEngine()
	{
		cout<<"BMW5"<<endl;
		m_engine->showEngine();
	}
};

class BMW6:public Car
{
public:
	BMW6(Engine*engine):Car(engine)
	{
	
	}
	virtual void InstallEngine()
	{
		cout<<"BMW6"<<endl;
		m_engine->showEngine();
	}
};
void main()
{
	Engine *engine =NULL;
	//engine = new Engine4400cc();
	engine =new Engine4500cc();

	BMW5 *bmw5 = new BMW5(engine);
	bmw5->InstallEngine();

	delete bmw5;
	delete engine;
	cout<<"nihao..."<<endl;
	system("pause");
	return ;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值