当前位置: 首页 > 编程笔记 >

C++:桥接模式

唐照
2023-04-24

模式定义

将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。

要点总结

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

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

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

桥梁模式的优点

抽象和实现相分离

优秀的扩充能力

实现细节对客户透明

桥梁模式的使用场景:

● 不希望或不适用使用继承的场景

例如继承层次过渡、 无法更细化设计颗粒等场景, 需要考虑使用桥梁模式。

● 接口或抽象类不稳定的场景

明知道接口不稳定还想通过实现或继承来实现业务需求, 那是得不偿失的, 也是比较失败的做法。

● 重用性要求较高的场景

设计的颗粒度越细, 则被重用的可能性就越大, 而采用继承则受父类的限制, 不可能出现太细的颗粒度。

class Messager {
protected:
	MessagerImp* messagerImp;
public:
	virtual void Login(string username, string password) = 0;
	virtual void SendMessage(string message) = 0;
	virtual void SendPicture(Image image) = 0;
	virtual ~Messager() {}
};

class MessagerImp {
public:
	virtual void PlaySound() = 0;
	virtual void DrawShape() = 0;
	virtual void WriteText() = 0;
	virtual void Connect() = 0;

	virtual ~MessagerImp() {}
};

//平台实现
class PCMessagerImp : public MessagerImp {
public:

	virtual void PlaySound() {}
	virtual void DrawShape() {}
	virtual void WriteText() {}
	virtual void Connect() {}
};

class MobileMessagerImp : public MessagerImp {
public:

	virtual void PlaySound() {}
	virtual void DrawShape() {}
	virtual void WriteText() {}
	virtual void Connect() {}
};

class MessagerLite :public Messager {
public:
	virtual void Login(string username, string password) {
		messagerImp->Connect();
	}
	virtual void SendMessage(string message) {
		messagerImp->WriteText();
	}
	virtual void SendPicture(Image image) {
		messagerImp->DrawShape();
	}
};

class MessagerPerfect :public Messager {
public:
	virtual void Login(string username, string password) {
		messagerImp->PlaySound();
		messagerImp->Connect();
	}
	virtual void SendMessage(string message) {
		messagerImp->PlaySound();
		messagerImp->WriteText();
	}
	virtual void SendPicture(Image image) {
		messagerImp->PlaySound();
		messagerImp->DrawShape();
	}
};

void Process(){
	MessagerImp* mImp = new PCMessagerImp();
	Messager *m = new MessagerPerfect(mImp);
}
 类似资料:
  • 主要内容:介绍,实现,DrawAPI.java,RedCircle.java,GreenCircle.java,Shape.java,Circle.java,BridgePatternDemo.java,相关文章推荐桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下

  • 亦称: Bridge 意图 桥接模式是一种结构型设计模式, 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构, 从而能在开发时分别使用。 问题 抽象? 实现? 听上去挺吓人? 让我们慢慢来, 先考虑一个简单的例子。 假如你有一个几何 形状Shape类, 从它能扩展出两个子类: ​ 圆形Circle和 方形Square 。 你希望对这样的类层次结构进行扩展以使其包含颜色, 所以你打

  • 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来

  • 问题 你需要为代码保持一个可靠的接口,可以经常变化或者在多种实现间转换。 解决方案 使用桥接模式作为不同的实现和剩余代码的中间体。 假设你开发了一个浏览器的文本编辑器保存到云。然而,现在你需要通过独立客户端的端口将其在本地保存。 class TextSaver constructor: (@filename, @options) -> save: (data) -> class

  • 简介 桥接模式把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。事物对象仅是一个抽象的概念。如“圆形”、“三角形”归于抽象的“形状”之下,而“画圆”、“画三角”归于实现行为的“画图”类之下,然后由“形状”调用“画图”。 如果有一个N品牌的手机,它有个小游戏,我要玩游戏,程序应该如何写? //N品牌的手机中的游戏 class HandSetNGame { public vo

  • 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。 我们通过下面的实例来演示桥接模式(Bridge Pattern)的用法。其中,可以使用相同的抽象类方法但是不同的桥接实现类,来