当前位置:网站首页>Mode pont
Mode pont
2022-06-26 13:06:00 【Baboon Chen!】
RÉFÉRENCES:
Mode de conception du pont (refactoringguru.cn)
Mode pont(BridgeMode)Détails (biancheng.net)
design-patterns-cpp/bridge at master · JakubVojvoda/design-patterns-cpp · GitHub
Un.、Qu'est - ce que le mode pont?
Définition:Séparer l'abstraction de la mise en oeuvre,Remplacer l'héritage par une relation combinatoire,Extensions à partir de différentes dimensions.
En termes simples,C'estALa classe contientBInterface de classe,Passer par le constructeurBMise en œuvre de la classe,C'estBLa classe est un pont..
Par exemple, il existe de nombreux types de jouets modèles,La sphère rouge、La sphère bleue、Le carré rouge、Carrés bleus, etc.Peut être en forme、Diviser par deux dimensions telles que la couleur.ALa classe représente la forme,BClasse pour la couleur.(Les dimensions peuvent être multiples,Mise en œuvre combinée)

2.、Exemple
Pont(Bridge)Le schéma contient les principaux rôles suivants::
- Abstraction(Abstraction)Rôle:Définir une classe abstraite,Et contient une référence à l'objet implémenté.
- Extension de l'abstraction(Refined Abstraction)Rôle:Est une sous - classe de personnages abstraits,Mettre en œuvre les méthodes d'affaires dans la classe mère,Et appeler les méthodes d'affaires dans les rôles de mise en oeuvre par des relations composites.
- Réalisation(Implementor)Rôle:Définir l'interface pour les rôles de mise en oeuvre,Pour les appels de rôle abstraits étendus.
- Réalisation concrète(Concrete Implementor)Rôle:Donner la mise en oeuvre concrète de l'interface de rôle de mise en oeuvre.

1、Bridge.cpp
/*
* C++ Design Patterns: Bridge
* Author: Jakub Vojvoda [github.com/JakubVojvoda]
* 2016
*
* Source code is licensed under MIT License
* (for more details see LICENSE)
*
*/
#include <iostream>
/*
* Implementor
* Rôle de mise en oeuvre:Définir l'interface pour les rôles de mise en oeuvre,Pour les appels de rôle abstraits étendus.
*/
class Implementor
{
public:
virtual ~Implementor() {}
virtual void action() = 0;
// ...
};
/*
* Concrete Implementors
* Rôles de mise en oeuvre spécifiques:Donner la mise en oeuvre concrète de l'interface de rôle de mise en oeuvre.
*/
class ConcreteImplementorA : public Implementor
{
public:
~ConcreteImplementorA() {}
void action()
{
std::cout << "Concrete Implementor A" << std::endl;
}
// ...
};
class ConcreteImplementorB : public Implementor
{
public:
~ConcreteImplementorB() {}
void action()
{
std::cout << "Concrete Implementor B" << std::endl;
}
// ...
};
/*
* Abstraction
* Rôle abstrait: Définir une interface de classe abstraite .
*/
class Abstraction
{
public:
virtual ~Abstraction() {}
virtual void operation() = 0;
// ...
};
/*
* RefinedAbstraction
* Extension des rôles abstraits: Implémenter l'interface d'affaires dans la classe parent ,Et appeler les méthodes d'affaires dans les rôles de mise en oeuvre par des relations composites.
*/
class RefinedAbstraction : public Abstraction
{
public:
~RefinedAbstraction() {}
RefinedAbstraction(Implementor *impl) : implementor(impl) {}
void operation()
{
implementor->action();
}
// ...
private:
Implementor *implementor;
};
int main()
{
Implementor *ia = new ConcreteImplementorA;
Implementor *ib = new ConcreteImplementorB;
Abstraction *abstract1 = new RefinedAbstraction(ia);
abstract1->operation();
Abstraction *abstract2 = new RefinedAbstraction(ib);
abstract2->operation();
delete abstract1;
delete abstract2;
delete ia;
delete ib;
return 0;
}
2、 Modèles de couleurs différentes


#include <iostream>
class Color
{
public:
virtual ~Color() {}
virtual void show() = 0;
};
class Red : public Color
{
public:
~Red() {}
void show() override
{
std::cout << "Color is red." << std::endl;
}
};
class Blue : public Color
{
public:
~Blue() {}
void show() override
{
std::cout << "Color is blue." << std::endl;
}
};
class Model
{
public:
virtual ~Model() {}
virtual void show() = 0;
};
// Modèle carré
class CubeModel : public Model
{
public:
~CubeModel() {}
CubeModel(Color *c) : color(c) {}
void show() override
{
std::cout << "I am Cube." << std::endl;
color->show();
}
private:
Color *color;
};
// Modèle sphérique
class SphereModel : public Model
{
public:
~SphereModel() {}
SphereModel(Color *c) : color(c) {}
void show() override
{
std::cout << "I am Sphere." << std::endl;
color->show();
}
private:
Color *color;
};
int main()
{
Color *red = new Red();
Color *blue = new Blue();
CubeModel *cube = new CubeModel(red);
cube->show();
SphereModel *sphere = new SphereModel(blue);
sphere->show();
delete cube;
delete sphere;
delete red;
delete blue;
return 0;
}
Trois、Avantages et inconvénients,Scénarios applicables
Avantages
- Conformément au principe d'ouverture et de fermeture, Séparation de l'abstraction et de la mise en oeuvre ,Forte capacité d'expansion.
- Principe de la responsabilité unique,La partie abstraite se concentre sur le traitement de la logique de haut niveau,Mise en œuvre partielle des détails de la plateforme.
Inconvénients
- Parce que les relations d'agrégation sont établies au niveau de l'abstraction, Exiger que les développeurs identifient correctement deux dimensions du système qui changent indépendamment .
- L'utilisation de ce schéma pour les classes fortement cohésives peut compliquer le Code .
边栏推荐
- Electron official docs series: References
- Splunk iowait 报警的解决
- 倍福PLC通过MC_ReadParameter读取NC轴的配置参数
- Dark horse notes - Common APIs
- C structure: definition and example
- P2393 yyy loves Maths II
- P5733 [deep foundation 6. example 1] automatic correction
- Deeply analyze the differences between dangbei box B3, Tencent Aurora 5S and Xiaomi box 4S
- What should the software test report include? Interview must ask
- PostGIS calculation angle
猜你喜欢

First knowledge - Software Testing

P5733 【深基6.例1】自动修正

倍福PLC选型--如何看电机是多圈绝对值还是单圈绝对值编码器

mariadb学习笔记

Goto statement to realize shutdown applet

MySQL 自定义函数时:This function has none of DETERMINISTIC, NO SQL 解决方案

倍福NC轴状态转移图解析

Verilog中的系统任务(显示/打印类)--$display, $write,$strobe,$monitor

IDC报告:百度智能云AI Cloud市场份额连续六次第一

倍福Ethercat模块网络诊断和硬件排查的基本方法
随机推荐
倍福TwinCAT3实现CSV、TXT文件读写操作
国标GB28181协议EasyGBS视频平台TCP主动模式拉流异常情况修复
Do you know the limitations of automated testing?
软件测试报告应该包含的内容?面试必问
B - Bridging signals
opencv高速下载
倍福NC轴状态转移图解析
Go 结构体方法
解中小企业之困,百度智能云打个样
Record a phpcms9.6.3 vulnerability to use the getshell to the intranet domain control
深度解析当贝盒子B3、腾讯极光5S、小米盒子4S之间的区别
G - Cow Bowling
J - Wooden Sticks poj 1065
processsing 函数random
倍福PLC基于NT_Shutdown实现控制器自动关机重启
How does easygbs solve the abnormal use of intercom function?
Vivado 错误代码 [DRC PDCN-2721] 解决
HDU 3555 Bomb
利用scrapy爬取句子迷网站优美句子存储到本地(喜欢摘抄的人有福了!)
. Net Maui performance improvement