设计模式_11 桥接模式(含 UML图 和 C++代码)

11 桥接模式

11.1 概念

将抽象与实现分离,使他们可以独立变化。用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。

11.2 结构

抽象化角色:定义抽象类,并包含一个对实现化对象的引用。
扩展抽象化角色:抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
实现化角色:定义实现化角色的接口,供扩展抽象化角色使用。
具体实现化角色:给出实现化角色接口的具体实现。

11.3 实现

11.3.1 UML图

在这里插入图片描述

11.3.2 代码

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

class VideoFile {
public:
	virtual void decode(string fileName) = 0;
};

class MP4File : public VideoFile {
	void decode(string fileName) {
		cout << "MP4格式文件:" << fileName << endl;
	}
};

class RmvbFile : public VideoFile {
	void decode(string fileName) {
		cout << "rmvb格式文件:" << fileName << endl;
	}
};

class OperatingSystem {
protected:
	VideoFile* videoFile;
public:
	virtual void play(string fileName) = 0;
};

class Windows : public OperatingSystem {
public:
	Windows() {}
	Windows(VideoFile* videoFile) {
		this->videoFile = videoFile;
	}
	void play(string fileName) {
		videoFile->decode(fileName);
	}
};

class Mac : public OperatingSystem {
public:
	Mac() {}
	Mac(VideoFile* videoFile) {
		this->videoFile = videoFile;
	}
	void play(string fileName) {
		videoFile->decode(fileName);
	}
};

int main() {
	OperatingSystem* system = new Windows(new RmvbFile());
	system->play("灵笼");
	system = new Mac(new MP4File());
	system->play("时光代理人");
	return 0;
}

11.4 优点

提高系统可扩展性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。
实现细节对客户透明。

11.5 使用场景

当一个类存在两个独立变化的维度,且这两个维度都需要扩展时。
当一个系统不希望使用继承或因为多层次继承导致系统类个数急剧增加时。
当一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性时,避免在两个层次之间建立静态的继承联系,通过桥接模式可以在抽象层建立一个关联关系。

return 设计模式概述;

返回设计模式概述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值