PrevUpHomeNext

Bridge Pattern @cpp


桥接模式 - cpp

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

桥接模式是一种 c++ 设计模式,它分离了业务逻辑的抽象和实现,并桥接它们。抽象和实现两个部分可以分别独立的变化和更新,而不需要改变另一个部分。

c++ 桥接模式代码比较简单,定义两套类,一套类的基以另一套类的基为成员,各自的继承类并不需要关心基类。

3月 - fayige.top

cpp 桥接模式代码例子

在游戏中,导弹是一种武器,我们可以把导弹叫做武器的实现,把武器叫做导弹的抽象,这只是一种比喻。

导弹也有很多种:巡航导弹、洲际导弹、蜂群导弹,... 。

武器也可以分类:制导武器、静态武器、... 。

missile : 导弹

cruise missile : 巡航导弹

swarm missile : 蜂群导弹

weapon : 武器

guided weapon : 制导武器

bridge pattern 桥接模式 c++ 代码

dp_bridge_pattern.cpp

文件名:dp_bridge_pattern.cpp

#include <iostream>

namespace wp
{

// 导弹基
class missile
{
public:
	virtual ~missile() = default;
	virtual void seek() const = 0;
};

// 巡航导弹
class cruise_missile: virtual public wp::missile
{
public:
	void seek() const override
	{
		std::cout << "巡航导弹正在索敌 ..." << std::endl;
	}
};

// 蜂群导弹

class swarm_missile: virtual public wp::missile
{
public:
	void seek() const override
	{
		std::cout << "蜂群导弹正在索敌 ..." << std::endl;
	}
};

// 武器
class weapon
{
protected:
	wp::missile & missile;
public:
	virtual ~weapon() = default;
public:
	weapon(wp::missile & missile__):
		missile{missile__}
	{
	}
public:
	void attack() const
	{
		std::cout << "武器桥接到导弹了:";
		missile.seek();
	}
};

// 制导武器
class guided_weapon: virtual public wp::weapon
{
public:
	guided_weapon(wp::missile & missile__):
		wp::weapon{missile__}
	{
	}
	void attack() const
	{
		std::cout << "制导武器桥接到导弹了:";
		this->missile.seek();
	}
};

}	// namespace wp

int main()
{
	auto m1 = wp::cruise_missile{};
	auto m2 = wp::swarm_missile{};

	auto w1 = wp::weapon{m1};
	auto w2 = wp::weapon{m2};

	auto w3 = wp::guided_weapon{m1};
	auto w4 = wp::guided_weapon{m2};

	std::cout << "==========" << "导弹即将发射 ...\n";
	m1.seek();
	m2.seek();

	std::cout << "\n==========" << "武器即将发射 ...\n";
	w1.attack();
	w2.attack();

	std::cout << "\n==========" << "武器即将发射 ...\n";
	w3.attack();
	w4.attack();
}

程序输出:

==========导弹即将发射 ...
巡航导弹正在索敌 ...
蜂群导弹正在索敌 ...

==========武器即将发射 ...
武器桥接到导弹了:巡航导弹正在索敌 ...
武器桥接到导弹了:蜂群导弹正在索敌 ...

==========武器即将发射 ...
制导武器桥接到导弹了:巡航导弹正在索敌 ...
制导武器桥接到导弹了:蜂群导弹正在索敌 ...

补充说明

代码例子里用到了多态。

相关链接

c++代理模式

c++适配器模式









首页:发一格 fayige.top









版权

Copyright 2024 fayige.top

Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
http://www.boost.org/LICENSE_1_0.txt)


PrevUpHomeNext