桥接模式bridge

本文介绍桥接模式的概念及其在软件设计中的应用。桥接模式通过将抽象与其实现分离,达到解耦的目的,使得两者可以独立变化。文章还提供了一个具体的C++实现案例,展示如何在实际编程中运用桥接模式。

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

概念:
桥接模式是构造型的设计模式之一。Bridge模式基于类的最小设计原则,遵循开闭原则(类的改动通过增加代码来实现,而不是修改源代码),通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任。它的主要特点是把抽象(abstraction)与行为实现(implementation)分离开来,
从而可以保持各部分的独立性以及应对它们的功能扩展。


接口实现:
Client 使用者
Abstraction base 抽象基类接口 (内含Implementor base 成员类)
Abstraction 抽象子类 (通过构造分配不同的行为,从而实现不同的行为)
Implementor base 行为实现基类接口
Implementor 行为实现子类


优势:

当抽象类需要更换行为时,不需要添加额外代码即可立即实现。


实现:

#include "stdafx.h"
#include <iostream>
using namespace std;
//把抽象(各个课程类) 和 行为实现(使用语言上课) 分开
//语言是一个名次,专门抽象成一个类;类中含有一个成员函数,使用它来上课

class Language//语言基类
{
public:
	virtual void useLanguage() = 0;//使用各种语言接口
};

class Chinese : public Language
{
public:
	virtual void useLanguage()
	{
		cout << "使用了中文" << endl;
	}
};

class English : public Language
{
public:
	virtual void useLanguage()
	{
		cout << "使用了英语" << endl;
	}
};

class Course //各个课程的课程基类
{
public:
	Course(Language *_lang)
	{
		m_lang = _lang;
	}
	virtual void useLanguage() = 0;

protected:
	Language *m_lang;//包含语言这个行为
};

class Math :public Course
{
public:
	Math(Language *p) : Course(p){ }

	virtual void useLanguage()
	{
		cout << "数学课 " ; 
		m_lang->useLanguage();
	}
};

class Physics:public Course
{
public:
	Physics(Language *p) : Course(p){ }

	virtual void useLanguage()
	{
		cout << "物理课 " ; 
		m_lang->useLanguage();
	}
};

void main()
{
	Chinese *_ch = new Chinese;
	Math *_ma = new Math(_ch);
	_ma->useLanguage();

	English *_Eng = new English;
	Physics *_ph = new Physics(_Eng);
	_ph->useLanguage();
	delete _ch;
	delete _ma;
	delete _Eng;
	delete _ph;
	system("pause");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值