当前位置:网站首页>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 .
边栏推荐
- 倍福TwinCAT3 NCI在NC轴界面中的基本配置和测试
- 倍福NC轴状态转移图解析
- Typescript
- 倍福PLC基于NT_Shutdown实现控制器自动关机重启
- 别乱用 FULL_CASE 和 PARALLEL_CASE
- How does easygbs solve the abnormal use of intercom function?
- 倍福PLC实现绝对值编码器原点断电保持---bias的使用
- Don't mess with full_ Case and parallel_ CASE
- Processsing 鼠标交互 学习
- What should the software test report include? Interview must ask
猜你喜欢

ES6:迭代器
![[esp32-c3][rt-thread] run RT-Thread BSP minimum system based on esp32c3](/img/4a/503240b332e3279047c438f1d9845e.png)
[esp32-c3][rt-thread] run RT-Thread BSP minimum system based on esp32c3

详细讲解C语言11(C语言系列)

别乱用 FULL_CASE 和 PARALLEL_CASE

首批通过!百度智能云曦灵平台获信通院数字人能力评测权威认证

Unit practice experiment 8 - using cmstudio to design microprogram instructions based on basic model machine (1)

使用SSH密钥对登陆服务器

倍福TwinCAT3 NCI在NC轴界面中的基本配置和测试

ES6模块

Chapter 01_ Installation and use of MySQL under Linux
随机推荐
File remote synchronization and backup artifact Rsync
P2393 yyy loves Maths II
Is it safe for the head teacher to open a stock account and open an account for financial management?
map 取值
Basic principle and application routine of Beifu PLC rotary cutting
National standard gb28181 protocol easygbs video platform TCP active mode streaming exception repair
Beifu PLC passes MC_ Readparameter read configuration parameters of NC axis
倍福PLC实现绝对值编码器原点断电保持---bias的使用
Biff TwinCAT can quickly detect the physical connection and EtherCAT network through emergency scan
Processsing 鼠标交互 学习
Explain C language 10 in detail (C language series)
openlayers 绘制动态迁徙线、曲线
How does easygbs solve the abnormal use of intercom function?
国标GB28181协议EasyGBS视频平台TCP主动模式拉流异常情况修复
倍福PLC通过程序获取系统时间、本地时间、当前时区以及系统时间时区转换
详细讲解C语言11(C语言系列)
Electron official docs series: Contributing
首批通过!百度智能云曦灵平台获信通院数字人能力评测权威认证
Guacamole installation
sql 将数据表b字段值赋值到数据表a中某一列