当前位置: 首页 > news >正文

结构型模式之桥接模式

文章目录

  • 概述
  • 原理
  • 结构图
    • 代码示例
  • 小结

概述

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

桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联来取代传统的多层继承,将类之间的静态继承关系转变为动态的组合关系,使得系统更加灵活,并易于扩展,有效的控制了系统中类的个数 (避免了继承层次的指数级爆炸).

原理

桥接(Bridge)模式包含以下主要角色:

  • 抽象化(Abstraction)角色 :主要负责定义出该角色的行为 ,并包含一个对实现化对象的引用。
  • 扩展抽象化(RefinedAbstraction)角色 :是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  • 实现化(Implementor)角色 :定义实现化角色的接口,包含角色必须的行为和属性,并供扩展抽象化角色调用。
  • 具体实现化(Concrete Implementor)角色 :给出实现化角色接口的具体实现。

结构图

在这里插入图片描述

代码示例

来看下代码示例吧,如下图:

// Implementor.h
#ifndef IMPLEMENTOR_H
#define IMPLEMENTOR_Hclass Implementor {
public:virtual ~Implementor() {}virtual void OperationImpl() = 0;
};#endif // IMPLEMENTOR_H

// ConcreteImplementorA.h
#ifndef CONCRETEIMPLEMENTORA_H
#define CONCRETEIMPLEMENTORA_H#include "Implementor.h"class ConcreteImplementorA : public Implementor {
public:void OperationImpl() override {// Concrete implementation Astd::cout << "Concrete Implementor A" << std::endl;}
};#endif // CONCRETEIMPLEMENTORA_H
// ConcreteImplementorB.h
#ifndef CONCRETEIMPLEMENTORB_H
#define CONCRETEIMPLEMENTORB_H#include "Implementor.h"class ConcreteImplementorB : public Implementor {
public:void OperationImpl() override {// Concrete implementation Bstd::cout << "Concrete Implementor B" << std::endl;}
};
// Abstraction.h
#ifndef ABSTRACTION_H
#define ABSTRACTION_H#include "Implementor.h"class Abstraction {
protected:Implementor* implementor;public:Abstraction(Implementor* implementor) : implementor(implementor) {}virtual ~Abstraction() { delete implementor; }virtual void Operation() = 0;
};
/ RefinedAbstraction.h
#ifndef REFINEDABSTRACTION_H
#define REFINEDABSTRACTION_H#include "Abstraction.h"class RefinedAbstraction : public Abstraction {
public:RefinedAbstraction(Implementor* implementor) : Abstraction(implementor) {}void Operation() override {// Refined operationstd::cout << "Refined Abstraction" << std::endl;implementor->OperationImpl();}
};
/ main.cpp
#include <iostream>
#include "Abstraction.h"
#include "ConcreteImplementorA.h"
#include "ConcreteImplementorB.h"
#include "RefinedAbstraction.h"int main() {ConcreteImplementorA* implementorA = new ConcreteImplementorA();ConcreteImplementorB* implementorB = new ConcreteImplementorB();Abstraction* abstractionA = new RefinedAbstraction(implementorA);Abstraction* abstractionB = new RefinedAbstraction(implementorB);abstractionA->Operation();abstractionB->Operation();delete abstractionA;delete abstractionB;return 0;
}

小结

上边有桥接模式的概述,原理,以及代码示例。看起来不错吧,感兴趣,可以一起学习学习。

http://www.lryc.cn/news/352975.html

相关文章:

  • 数据结构--顺序表
  • 【C++项目】实时聊天的在线匹配五子棋对战游戏
  • 7.2k star的万能视频解析下载插件
  • dmanywhere的docker制作
  • Leetcode | 5-21| 每日一题
  • vue3添加收藏网站页面
  • 吴恩达深度学习笔记:超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)3.4-3.5
  • 牛客NC362 字典序排列【中等 DFS Java/Go/PHP】
  • PHP获取文件路径getcwd()、__DIR__、__FILE__的区别
  • Kafka(十三)监控与告警
  • SBC3568启动升级,灵活更换动画logo
  • v-if 与 v-show(vue3条件渲染)
  • nuxt: generate打包后访问资源404问题
  • 【图像超分】论文精读:Residual Non-local Attention Networks for Image Restoration(RNAN)
  • AI大模型:大数据+大算力+强算法
  • 同名在线查询系统微信小程序源码下载支持多种流量主,附带系统教程
  • 2024年5月26日 十二生肖 今日运势
  • Vue 3 组件基础与模板语法详解
  • ACM实训冲刺第十八天
  • 22AP70/SS927
  • C++实现的代码行数统计器
  • C# 结合 JS 暴改腾讯 IM SDK Demo
  • 【Web】CISCN 2024初赛 题解(全)
  • 【C++进阶】AVL树
  • 云部署最简单python web
  • 【Pytorch】【MacOS】14.m1芯片使用mps进行深度模型训练
  • go学习笔记-从圣经中抄录的接口值的思考
  • ICML 2024 时空数据(Spatial-Temporal)论文总结
  • 多线程(C++11)
  • HLS入门