GoF结构模型:桥模式

本文深入探讨了桥模式(BridgePattern)的设计理念,旨在通过解耦抽象层与实现层,实现两者的独立变化。桥模式适用于拥有两个强变化维度的场景,如消息发送应用中的平台与风格变化,通过组合而非继承方式,有效解决了单一职责原则下类膨胀的问题。

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

桥模式(Bridge Pattern)

单一职责模式:在软件组件设计中,如果责任划分的不清晰,使用继承得到的
结果往往随着需求的变化, 子类急剧膨胀,同时充斥着重复代码,这时候关键是划分责任

意图

使抽象层与实现层分离,以便两者可以只有变化

应用场景:

1. 解耦合抽象和实现
2. 抽象和实现需要分别只有扩展

影响:

  1. 增加了类的数量

参与者:

Abstraction, RefinedAbstraction, Implementor, ConcreteImplementor

在这里插入图片描述

其中Abstraction和Implementor两个维度的变化 ,使用组合的方式添加在一起(不使用继承),

说的比较抽象,下面举例:

例:

Messager可以在处理文本、可以播放音乐、画画等等。有两个维度的变化
	
	1. 目前有两个平台:PC版本、Mobile版本 (以后还可能增加平台)

	2.目前每一个平台两个风格:Perfect风格、Lite风格 (以后还可能增加新的风格)

其中Abstraction类

class Messager{	//abstration
public:
	virtual void login(string username, string password = 0) = 0;
	virtual void sendMessage(string message) = 0;
	virtual void sendPicture(Image image) = 0;
protected:
	MessageImplement* messagImp;
};

Implementor类:

class MessageImplement{	
public:
	virtual void playSound() = 0;
	virtual void drawShape() = 0;
	virtual void writeText() = 0;
	virtual void connect() = 0;
};

其中Implementor 可以在 PC 和 Mobile 两个平台

class PCMessageImplement : public MessageImplement {
public:
	virtual void playSound() {};
	virtual void drawShape() {};
	virtual void writeText() {};
	virtual void connect() {};
};

class MobileMessageImplement : public MessageImp {
public:
	virtual void playSound() {};
	virtual void drawShape() {};
	virtual void writeText() {};
	virtual void connect() {};
};

Messager有两种风格

class MessageLite :public Messager {	//实现登陆等等
public:
	MessageLite(MessageImplement* m) { messagImp = m ;}

	virtual void login(string username, string password = 0) {
		messagerImp->Connect();
	};
	virtual void sendMessage(string message) {
		messagerImp->writeText();
	};
	virtual void sendPicture(Image image) {};
};

class MessagePerfect :public Messager {	//实现登陆等等
public:
	//实现不同模式的,pcMessageLite和mobileMessageLite
	//MessageImp* messagImp;			//此处提到父类中去
	MessageLite(MessageImp* m) { messagImp = m ;}

	virtual void login(string username, string password = 0) {};
	virtual void sendMessage(string message) {};
	virtual void sendPicture(Image image) {};
};

总结:

  1. Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现
    可以沿着各自的维度来变化。所谓抽象和实现沿着各自维度的变化,即“子类化”它们

  2. Bridge模式有时候类似于多继承方案,但是多继承方案往往违背“单一职责”原则(即一个类只有
    一个变化的原因),复用性比较差。Bridge模式是比多继承更好的解决方法。

  3. Bridge模式的应用一般在“两个非常强的变化维度”,有时一个类也有多于两个变化维度,这时可
    以使用Bridge的拓展模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值