首页 > 其他分享 >桥接模式

桥接模式

时间:2022-09-21 12:12:31浏览次数:56  
标签:Run 桥接 void 模式 phone virtual new public

理论

桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。

这里地抽象与它的实现分离,并不是说让抽象类与其派生类分离,因为这没有任何意义。实现指的是抽象类和它的派生类用来实现自己的对象。

可以理解为:实现系统有多个角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合。

实际就是合成/聚合复用原则的应用。

实例

手机有不同的品牌,又可以包含不同的软件,模拟手机分类

UML类图

按品牌分类实现

 按软件分类实现

上面两种结构在需要增加手机品牌或功能的时候会收到很大的影响,因为通过继承实现的是一种紧耦合关系。如果不断地增加新品牌或新功能,类会越来越多。所以应该遵循合成/聚合复用原则,优先使用对象合成/聚合,而不是类继承

桥接模式地核心意图就是把这些实现独立出来,让它们各自地变化。使得每种实现地变化不会影响其他实现,从而达到应对变化的目的。

 代码实现

#include <iostream>
using namespace std;

//手机软件抽象类
class HandsetSoft {
public:
	virtual void Run() {};
};

//具体软件类
class HandsetGame :public HandsetSoft {
public:
	virtual void Run() {
		cout << "运行手机游戏" << endl;
	}
};
class HandsetAddressList :public HandsetSoft {
public:
	virtual void Run() {
		cout << "运行手机通讯录" << endl;
	}
};

//手机品牌抽象类
class HandsetBrand {
public:
	void SetHandsetSoft(HandsetSoft* soft) {
		this->soft = soft;
	}
	virtual void Run() {};

protected:
	HandsetSoft* soft;
};

//具体手机品牌类
class HandsetBrandN :public HandsetBrand {
public:
	virtual void Run() {
		cout << "品牌N ";
		soft->Run();
	}
};
class HandsetBrandM :public HandsetBrand {
public:
	virtual void Run() {
		cout << "品牌M ";
		soft->Run();
	}
};

//客户端
int main()
{
	HandsetBrand* phone;
	phone = new HandsetBrandN();
	phone->SetHandsetSoft(new HandsetGame);
	phone->Run();
	phone->SetHandsetSoft(new HandsetAddressList);
	phone->Run();

	phone = new HandsetBrandM();
	phone->SetHandsetSoft(new HandsetGame);
	phone->Run();
	phone->SetHandsetSoft(new HandsetAddressList);
	phone->Run();
}

运行结果:

 

标签:Run,桥接,void,模式,phone,virtual,new,public
From: https://www.cnblogs.com/kyzh-lhl/p/16715152.html

相关文章

  • 使用 react-spring 开发一个智能暗模式切换按钮
    最近,我重写了博客右上角的深色模式切换按钮。为此,我也学会了学习Figma。虽然技术不难,但收获不少。至少我可以根据猫和老虎设计一些简单的SVG图形。废话不多说,介绍一下我......
  • JAVA进阶--XML、XML解析、XPath、设计模式--2022年9月19日
    第一节1、XML是什么?XML的全称为(EXtensibleMarkupLanguage),是一种可扩展的标记语言它是一种数据表示格式,可以用于自定义数据格式2、......
  • 设计模式---建造者模式
    概要设计模式类型:创建型目标问题:创建对象时,参数设置的灵活性问题。(具体看案例)接下来我们看一个需要改进的案例。对象创建的优化现在有个Employee类,你能预想到在开......
  • rabbitmq模式 routing
    rabbitmq模式routingemit_log_direct.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePhpAm......
  • rabbitmq模式 publish subscribe
    rabbitmq模式publishsubscribeemit_log.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePh......
  • rabbitmq模式 RPC
    rabbitmq模式RPCrpc_server.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePhpAmqpLib\Mes......
  • rabbitmq模式 topics
    rabbitmq模式topicsemit_log_topic.php<?phprequire_once__DIR__.'/../../vendor/autoload.php';usePhpAmqpLib\Connection\AMQPStreamConnection;usePhpAmqp......
  • 单例模式
    理论单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式的好处:单例模式因为Singleton类封装它的唯一实例,这样它可以严格地控制客户怎......
  • Java单例模式
    单例模式  单例模式核心是保证一个类只有一个实例,并且提供一个访问实例的全局访问点。使用场景  需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过......
  • CSDN(markdown模式下)如何调整图片大小以及如何调整位置
    版权声明:本文为CSDN博主「圣喵」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/m0_66769266/article/details/1240......