【C++设计模式】桥接模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxh2075/article/details/53503967
#ifndef __BRIDGE_H__
#define __BRIDGE_H__

#include <stdio.h>

//【说明】
// Bridge模式很好的诠释了面向对象的原则:依赖于抽象而非依赖于具体,依赖于抽象就可以独立的变化,极大程度的降低耦合性。

//【定义】
// 桥接模式 : 将抽象部分与实现部分分离,使它们都可以独立的变化。

//【角色】
// Abstraction:抽象类,包含实现类对象的引用。 
// RefinedAbstraction:扩充抽象类。 
// Implementor:实现类接口。 
// ConcreteImplementor:具体实现类。 

//【意义】
// 桥接模式分离了抽象部分和实现部分,从而极大的提供了系统的灵活性,让抽象部分和实现部分独立开来,分别定义接口,这有助于系统进行分层设计,从而产生更好的结构化系统。
// Bridge模式的特征是将"类的功能层次结构"与"类的实现层次结构"分离开,这样有利于他们在各自的方向上独立的扩展。
// 当需要增加功能时,只需要在"类的功能层次结构"一侧增加即可,不必对"类的实现层次结构"做任何修改,而且增加后的功能可以被"所有的实现"使用。

//【示例】

//电器和开关的例子
//电器设备的抽象接口(类的实现层次结构)
class iEquipment
{
public:
	iEquipment(){ }

	virtual ~iEquipment(){ }

public:
	virtual void open() = 0;

	virtual void close() = 0;
};

//电灯实现了电器设备的接口
class Light : public iEquipment
{
public:
	virtual void open();

	virtual void close();

};

//电风扇实现了电器设备的接口
class Fan : public iEquipment
{
public:
	virtual void open();

	virtual void close();

};

//抽象开关(类的功能层次结构),依赖于电器设备的抽象,而不是电器设备的具体,这样就可以在实现时控制不同的电器设备
class iSwitch
{
public:
	iSwitch(iEquipment *eq) : m_eq(eq){ }

	virtual ~iSwitch() { }

public:
	virtual void start() = 0;

	virtual void stop() = 0;

protected:
	iEquipment *m_eq; //包含类的实现层次结构对象的引用
};

//圆形开关
class RoundSwitch : public iSwitch
{
public:
	RoundSwitch(iEquipment *eq) : iSwitch(eq){ }

	virtual void start();

	virtual void stop();
};

//方形开关
class SquareSwitch : public iSwitch
{
public:
	SquareSwitch(iEquipment *eq) : iSwitch(eq){ }

	virtual void start();

	virtual void stop();
};

void TestBridge();



#endif

#include "Bridge.h"

void Light::open()
{
	printf("Light Open. \n");
}

void Light::close()
{
	printf("Light Close. \n");
}

void Fan::open()
{
	printf("Fan Open. \n");
}

void Fan::close()
{
	printf("Fan Close. \n");
}

void RoundSwitch::start()
{
	m_eq->open();
}

void RoundSwitch::stop()
{
	m_eq->close();
}

void SquareSwitch::start()
{
	m_eq->open();
}

void SquareSwitch::stop()
{
	m_eq->close();
}

void TestBridge()
{
	iEquipment * light = new Light();
	iEquipment * fan = new Fan();

	iSwitch * roundSwitch = new RoundSwitch(fan);
	roundSwitch->start();

	iSwitch * squareSwitch = new SquareSwitch(light);
	squareSwitch->stop();

	delete roundSwitch;
	delete squareSwitch;

	delete light;
	delete fan;
}

猜你喜欢

转载自blog.csdn.net/zxh2075/article/details/53503967