c++之桥接模式

本文通过武侠故事背景,详细解析了桥接模式的概念及其应用。桥接模式将抽象部分与实现部分分离,使两者能独立变化,提高代码的灵活性和复用性。文中以华山派与崆峒派修炼不同武功秘籍为例,展示了桥接模式如何在实际编程中实现。通过具体的C++代码示例,读者可以深入理解桥接模式的设计思想。

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

桥接模式

定义:把抽象部分和它的实现部分分离,使得它们都可以独立的变化

栗子场景:华山派和崆峒派先后获得了武林秘籍辟邪剑谱和九阴真经,于是开始苦练此功..

UML类图

代码:

#include<iostream>

using namespace std;
class Sects;

//功夫
class Kungfu
{
public:
	virtual void practice() = 0;
};

//九阴真经
class JiuyinZj :public Kungfu
{
public:
	virtual void practice()
	{
		cout << "@九阴真经。注:玄门内功,至阴至柔" << endl;
	}
};

//辟邪剑谱
class PixieJp :public Kungfu
{
public:
	virtual void practice()
	{
		cout << "@辟邪剑谱,注:欲练此功,必先自宫" << endl;
	}
};


//门派 
class Sects{
public:
	Sects() :m_kungfu(nullptr){}

	void setMartialarts(Kungfu* m)
	{
		this->m_kungfu = m;
	}
	Kungfu* getKungfu()
	{
		return m_kungfu;
	}
	virtual void practice() = 0;
private:
	Kungfu *m_kungfu;	//桥接
};

//华山
class HuaShan :public Sects
{
public:
	void practice()
	{	
		getKungfu()->practice();
	}
};

//崆峒
class KongTong :public Sects
{
public:
	void practice()
	{
		getKungfu()->practice();
	}
};

//客户端
int main()
{
	Sects *sects = new HuaShan;
	cout << "华山派弟子正在练习:" << endl;
	sects->setMartialarts(new JiuyinZj);
	sects->practice();

	sects->setMartialarts(new PixieJp);
	sects->practice();

	sects = new KongTong;
	cout << "崆峒派弟子正在练习:" << endl;
	sects->setMartialarts(new JiuyinZj);
	sects->practice();

	sects->setMartialarts(new PixieJp);
	sects->practice();
	if (sects)
	{
		delete sects;
		sects = nullptr;
	}

	return 0;
}

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值