c++ 设计模式 的课本范例(下)

(19) 桥接模式 Bridge,不是采用类继承,而是采用类组合,一个类的数据成员是类对象,来扩展类的功能。源码如下:

class OS  // 操作系统负责绘图
{
public:virtual ~OS() {}virtual void draw(char * ptrCache , int lengthCache) = 0 ;
};class OS_Window : public OS
{
public:void draw(char* ptrCache, int lengthCache) { cout << " windows 下绘图\n\n"; }
};class OS_Linux : public OS
{
public:void draw(char* ptrCache, int lengthCache) { cout << " Linux 下绘图\n\n"; }
};class Image  // 本基类有成员函数负责解析与加载图片至缓存,但绘图调用跟操作系统有关的底层函数
{
protected: OS * ptrOS;
public:virtual ~Image() {}Image(OS* p) : ptrOS(p) {}virtual void parseImage( const char * name) = 0;
};class Image_jpg : public Image
{
public:Image_jpg(OS * p) : Image(p){}void parseImage(const char* name){cout << " 解析 jpg 图片  ,  ";char c[100];                  // 假定分析 jpg 格式后的图片信息统一用 100 字节存储。ptrOS->draw(c , 100);}
};class Image_png : public Image
{
public:Image_png(OS* p) : Image(p) {}void parseImage( const char* name){cout << " 解析 png 图片  ,  ";char c[50];                  // 假定分析 png 格式后的图片信息统一用 50 字节存储。ptrOS->draw(c, 50);}
};int main()
{OS_Window osWindow;OS_Linux osLinux;Image_jpg jpgA(&osLinux) , jpgB(&osWindow) ;Image_png pngA(&osLinux) , pngB(&osWindow) ;jpgA.parseImage("aaa"); jpgB.parseImage("b");pngA.parseImage("c");pngB.parseImage("dd");return 0;
}

测试结果如下:

在这里插入图片描述

(20)

谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拼多多滑块逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi …

花生壳 搭建服务器

使用花生壳来搭建服务器。下面是一个基本的步骤指南&#xff0c;帮助您完成搭建过程&#xff1a; 注册花生壳账号&#xff1a; 访问花生壳官网&#xff08;https://hsk.oray.com/&#xff09;&#xff0c;点击注册账号。根据提示填写相关信息&#xff0c;完成账号注册。 下载并…

js懒加载

懒加载&#xff08;Lazy Loading&#xff09;是一种在网页加载过程中延迟加载某些资源的技术。在JavaScript中实现懒加载的方式有很多&#xff0c;下面是其中一种简单的实现方式&#xff1a; 1. 首先&#xff0c;给需要懒加载的元素添加一个特定的class&#xff08;例如"l…

uniapp中使用threejs加载几何体

我的建议是使用这个库 https://github.com/deepkolos/three-platformize 为什么&#xff1f;我试了uniapp推荐的和threejs-miniprogram这个小程序官方库&#xff0c;都加载不出来我的obj模型。所有我推荐不要用obj模型最好&#xff0c;挺多都支持GLTF模型的&#xff0c;但是我不…

基于ssm口红商城管理的设计与实现

一、&#x1f468;‍&#x1f393;网站题目 口红商城项目可以提供更加便捷和高效的购物方式。消费者可以在家中使用电脑或手机随时随地购物&#xff0c;避免了传统购物方式中需要花费时间和精力去实体店铺购物的麻烦。此外&#xff0c;口红商城项目还提供了更多的选择和更低的…

【Android面试八股文】性能优化相关面试题:什么时候会发生内存泄漏?举几个你遇到过的例子

内存泄漏通常发生在程序中某些对象被分配了内存但在不再需要时未能正确释放,导致这部分内存无法被垃圾回收器回收,最终造成系统内存的浪费和性能问题。 以下是一些常见的内存泄漏示例: 未关闭资源: 当使用了需要手动关闭的资源(如文件、数据库连接、网络连接等),但在使…

2D 激光 SLAM-Cartographer 实战

源码 https://github.com/cartographer-project/cartographer https://github.com/cartographer-project/cartographer_ros 课 程 下 的 注 释 版 代 码 &#xff1a; https://github.com/xiangli0608/cartographer_detailed_comments_ws 备用地址&#xff1a; https://gi…

复分析——第8章——共形映射(E.M. Stein R. Shakarchi)

第8章 共形映射(Conformal Mappings) The results I found for polygons can be extended under very general assumptions. I have undertaken this research because it is a step towards a deeper understanding of the mapping problem, for which not much has hap…

C++视觉开发 二.OpenCV基础

目录 本章记录OpenCV开发中的基本操作语法 一.基础 1.读取图像 2.显示图像 3.保存图像 二.图像 1.像素处理 2.彩色图像 三.滤波 1.高斯滤波&#xff08;Gaussian Blur&#xff09; 功能&#xff1a; 高斯滤波是一种常用的线性平滑滤波器&#xff0c;用于降低图像噪声…

绕过HTTP401和403响应限制工具

目录 介绍 开发语言 特征 动态 安装使用 参数 示例用法 工具地址 介绍 一种旨在自动化各种技术的工具,以绕过HTTP 401和403响应代码并访问系统中未授权的区域。此代码是为安全爱好者和专业人士只。使用它在您自己的风险。 开发语言 Python3 特征 探测HTTP 401和403…

关于嵌入式变量存储位置的思考

嵌入式软件中的变量存储比较灵活&#xff0c;可以将变量存储在内核中&#xff0c;此时变量的访问最快&#xff1b;也可以将变量存储在ram中&#xff0c;此时变量的访问速度次之&#xff1b;最后可以将变量存储于flash中&#xff0c;此时变量的访问速度最快。&#xff08;不考虑…

v-for中key的原理以及用法

在 Vue.js 中&#xff0c;v-for 指令用于基于源数据多次渲染元素或模板块。当使用 v-for 渲染列表时&#xff0c;为每个列表项提供一个唯一的 key 属性是非常重要的。key 的主要作用是帮助 Vue 跟踪每个节点的身份&#xff0c;从而重用和重新排序现有元素。 先来张原理图&#…

Batch文件中的文件移动指南:使用move命令的深度解析

Batch文件&#xff0c;也称为批处理脚本&#xff0c;是Windows操作系统中一种自动化执行一系列命令的脚本文件。使用Batch文件可以极大地提高工作效率&#xff0c;尤其是在需要重复执行相同命令序列的情况下。move命令是Batch文件中用于移动或重命名文件和目录的基本命令之一。…

开机弹窗缺失OpenCL.dll如何解决?分享5种靠谱的解决方法

在电脑使用过程中&#xff0c;我们可能会遇到一些错误提示&#xff0c;其中之一就是“开机提示找不到OpenCL.dll”。那么&#xff0c;这个错误提示到底是怎么回事呢&#xff1f;它又对电脑有什么影响&#xff1f;我们又该如何解决这个问题并预防OpenCL.dll再次丢失呢&#xff1…

基于Ollama Python的本地多模态大模型

0&#xff0c;背景 最近测试Ollama&#xff0c;发现之前直接下载开源模型在我电脑上都跑不动的模型&#xff0c;居然也能运行了&#xff08;AMD 7840HS核显/32GB内存&#xff09;&#xff0c;突发奇想那些多模态大模型能不能基于Python接口使用&#xff0c;所以决定尝试一下。…

网页用事件监听器播放声音

一、什么是监听器&#xff1a; 在前端页面中&#xff0c;事件监听器&#xff08;Event Listener&#xff09;是一种编程机制&#xff0c;它允许开发者指定当特定事件&#xff08;如用户点击按钮、鼠标悬停、页面加载完成等&#xff09;发生时执行特定的代码块。简而言之&#x…

用Python实现的10种聚类算法汇总

前言 聚类是一种无监督学习问题。 它经常用来在输入数据的特征空间中寻找分组&#xff0c;例如基于顾客行为将消费者分组。 聚类算法有很多种&#xff0c;没有哪一种聚类算法适用于所有的问题。不过&#xff0c;有必要去探究多种聚类算法&#xff0c;以及每种算法的不同配置…

服务器上VMWare Workstation虚拟机声卡支持

问题&#xff1a;联想服务器没有声卡&#xff0c;Windows 服务器安装了VMWare Workstation&#xff0c;里面的Windows 11虚拟机&#xff0c;我远程桌面上来&#xff0c;没有声卡&#xff0c;但是我想做 声音方面的测试就没办法。 解决办法&#xff1a; 服务器主机上安装虚拟机…

Java 多线程编程:线程的基本概念

在现代计算中&#xff0c;多线程编程是一种常见且重要的技术。Java 提供了强大的多线程支持&#xff0c;使得开发者可以轻松地实现并发编程。本文将详细介绍 Java 中线程的基本概念&#xff0c;包括线程与进程的区别以及线程的生命周期。 线程和进程 首先&#xff0c;让我们了…

5.4符号三角形问题

#include<iostream> #include<stdio.h> using namespace std; int half; int ssum; int cnt0;//减号的个数 int n; int p[100][100]; int countt0; void BackTrack(int s) {if(cnt>half||s*(s-1)/2-cnt>half)return ;if(s>n){countt;return ;}for(int i0;…