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

《桥接模式(极简c++)》

        本文章属于专栏《设计模式(极简c++版)》


         继续上一篇《原型模式(极简c++)》。本章简要说明桥接模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。

  • 模式说明
    • 方案: 将抽象部分与它的实现部分分离,使多个组合在一起的品类可以独立变化。
    • 优点:
      • 分离抽象和实现部分,使得它们可以独立地变化,易于扩展。
      • 通过对象组合而不是继承的方式实现解耦,提高了代码的灵活性。
    • 缺点:
      • 增加了系统的复杂度,因为需要多个抽象类和实现类。
  • 本质思想:用一个抽象类组合另外一个抽象类,如形状和颜色,在构建时,使用具体的类完成组合,如红色的正方形。
  • 实践建议:一个基础主体包含多个属性时,都可以使用。该模式能很好地保留设计时的模块语义,方便未来维护
#include <iostream>// 实现部分接口:颜色
class Color {
public:virtual void applyColor() const = 0;
};// 具体实现类:红色
class RedColor : public Color {
public:void applyColor() const override {std::cout << "Red" << std::endl;}
};// 具体实现类:绿色
class GreenColor : public Color {
public:void applyColor() const override {std::cout << "Green" << std::endl;}
};// 抽象部分类:形状
class Shape {
protected:Color* color;public:Shape(Color* c) : color(c) {}virtual void draw() const = 0;
};// 扩展的抽象部分类:圆形
class Circle : public Shape {
public:Circle(Color* c) : Shape(c) {}void draw() const override {std::cout << "Drawing Circle with color ";color->applyColor();}
};// 扩展的抽象部分类:矩形
class Rectangle : public Shape {
public:Rectangle(Color* c) : Shape(c) {}void draw() const override {std::cout << "Drawing Rectangle with color ";color->applyColor();}
};int main() {Color* red = new RedColor();Color* green = new GreenColor();Shape* redCircle = new Circle(red);Shape* greenRectangle = new Rectangle(green);redCircle->draw(); // 输出: Drawing Circle with color RedgreenRectangle->draw(); // 输出: Drawing Rectangle with color Greendelete red;delete green;delete redCircle;delete greenRectangle;return 0;
}

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

相关文章:

  • jconsole的使用
  • JavaScript详细教程
  • Hive自定义GenericUDF函数
  • 伊理威科技:抖音开网店新手刚做选啥品
  • 【爬虫】专栏文章索引
  • 【Linux】Linux开发工具-vim / 编译器-gcc/g++ / 调试器-gdb / git操作 / 项目自动化构建工具-make/Makefile
  • 解决VM重新打开后找不到共享文件夹的问题
  • uni app 空挡接龙
  • oracle表备份及还原
  • 牛客小白月赛89补题1(ABCD)(偏难)
  • 内存条@电脑支持的最大内存@升级内存硬件
  • 如何了解AI基础概念
  • Apache James数据库存储用户信息的密码加密问题
  • 大数据分布式事务的深入理解?
  • LeetCode hot100-17
  • java网络原理(二)------TCP确认应答和超时重传
  • 机器学习:智能时代的核心引擎
  • Docker-Image
  • YOLOv8 如何实现多主干特征融合方式 | GhostNet+ShuffleNet / SwinTransformer+ShuffleNet
  • 工作需求ElementUi组件的使用
  • 自动驾驶轨迹规划之时空语义走廊(一)
  • [环境配置].ssh文件夹权限修改方法
  • LeetCode刷题【树状数组、并查集、二叉树】
  • 使用POI以OLE对象的形式向excel中插入附件(pdf为例)
  • Unity构建详解(2)——SBP的初始设置和脚本编译
  • Matlab使用教程(持续更新)
  • 管理能力学习笔记一:角色转身
  • Redis面试题 概要
  • 原型,模板,策略,适配器模式
  • Ollama 在本地快速启动并执行LLM【大语言模型】