桥接模式是什么?

编程入门 行业动态 更新时间:2024-10-10 07:31:04

<a href=https://www.elefans.com/category/jswz/34/1755939.html style=桥接模式是什么?"/>

桥接模式是什么?

一、使用场景

拿电脑来举例子。电脑有微软的电脑,联想的电脑。而电脑上可以运行游戏,也可以运行记事本等软件。有两种方式可以实现电脑产品,如下:

方式一:

这种方式耦合性太高,比如像添加一种软件,需要添加微软电脑的软件和联想电脑的软件。同样的像添加一种电脑,也要添加相应的软件。如果要修改一种软件,则要修改很多软件。

方式二,那就是电脑是电脑,软件是软件两者分离。如下图:

很明显方式二耦合性底,容易维护和扩展。这里电脑就相当于抽线,而软件则相当于实现。总的来说就是桥接模式主要是实现系统可能有多个角度分类,每一种分类都有可能变化。那么就把这种多角度分离出来

让它们独立变化,减少它们之间的耦合。

 

二、定义

多个角度看问题,每一个角度有一个抽象类,抽象类底下具体的类即是各个角度看问题看到的具体内容,同时不同角度看问题的基类是用组合的形式联系起来的,这样子可以替代多个类之间频繁继承的现象,减少类的个数,同时避免因为不断继承打破开闭原则。

 

三、代码

以电脑和软件为例其示例代码如下:

// BridgeModel.h文件
#pragma once
#include <iostream>class Software
{
public:virtual void run() = 0;
};class SoftwareGame : public Software
{
public:void run(){std::cout << "游戏软件" << std::endl;}
};class SoftwareNote : public Software
{
public:void run(){std::cout << "记事本软件" << std::endl;}
};
//
class Computer
{
protected:Software * m_software;
public:Computer() : m_software(nullptr){}virtual ~Computer(){if (nullptr == m_software)delete m_software;}virtual void run() = 0;void setSoftware(Software *p){m_software = p;}
};class ComputerLenovo : public Computer
{
public:void run(){std::cout << "联想的电脑运行";m_software->run();}
};class ComputerMirco : public Computer
{
public:void run(){std::cout << "微软的电脑运行";m_software->run();}
};

客户端代码如下:

#include <iostream>
#include "BridgeModel.h"int main()
{using namespace std;// 桥接模式Computer *p = new ComputerLenovo();p->setSoftware(new SoftwareGame());p->run();delete p;p = new ComputerMirco();p->setSoftware(new SoftwareNote());p->run();delete p;getchar();return 0;
}

 


 

更多推荐

桥接模式是什么?

本文发布于:2024-02-08 20:29:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674721.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:桥接   模式

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!