Dxf库中的DL_CreationAdapter与DL_CreationInterface

在软件工程中,适配器模式(Adapter Pattern)用于将一个类的接口转换成客户希望的另一个接口。在 DXF 文件解析中,DL_CreationAdapter 和 DL_CreationInterface 可能用于适配不同的数据结构或接口,使得解析器能够处理不同类型的数据。以下是对它们的定义、关系和应用的介绍:

  1. DL_CreationInterface

    • DL_CreationInterface 是一个接口类,定义了一组用于创建图形对象的方法。
    • 这个接口可能包括诸如创建线段、多段线、圆弧等图形对象的方法。
    • 其目的是为了定义一组标准的接口,让具体的创建类(如解析器)去实现这些方法来创建对应的图形对象。
  2. DL_CreationAdapter

    • DL_CreationAdapter 是一个适配器类,实现了 DL_CreationInterface 接口,并根据需要对接口方法进行适配。
    • 这个适配器类可以将外部数据结构转换为符合 DL_CreationInterface 接口的形式,从而让解析器能够统一处理不同类型的数据。
    • 适配器模式的核心思想是将不兼容的接口通过适配器进行转换,使得原本无法协同工作的类可以一起工作。

关系与应用:

  • DL_CreationAdapter 实现了 DL_CreationInterface 接口,通过适配器模式将外部数据结构转换为标准的创建接口,使得解析器可以统一处理不同类型的图形对象的创建。
  • 当需要解析不同类型的 DXF 数据并创建对应的图形对象时,可以使用 DL_CreationAdapter 来适配不同的数据结构,统一生成图形对象。

在实际应用中,DL_CreationInterface 和 DL_CreationAdapter 可以帮助实现 DXF 文件的解析器,处理各种不同类型的图形数据并创建相应的图形对象。通过适配器模式,可以使得解析器具有更好的灵活性和可扩展性,同时保持代码的清晰和可维护性。

以下是一个简单的示例程序,演示如何使用 DL_CreationInterface 接口来定义创建图形对象的方法,并通过一个实现了该接口的类来创建线段和圆形对象:

#include <iostream>// DL_CreationInterface 定义了创建图形对象的接口
class DL_CreationInterface {
public:virtual void createLine(double x1, double y1, double x2, double y2) = 0;virtual void createCircle(double x, double y, double radius) = 0;
};// DL_CreationAdapter 实现了 DL_CreationInterface 接口
class DL_CreationAdapter : public DL_CreationInterface {
public:void createLine(double x1, double y1, double x2, double y2) override {std::cout << "Creating a line from (" << x1 << ", " << y1 << ") to (" << x2 << ", " << y2 << ")" << std::endl;}void createCircle(double x, double y, double radius) override {std::cout << "Creating a circle at (" << x << ", " << y << ") with radius " << radius << std::endl;}
};int main() {// 使用 DL_CreationAdapter 创建图形对象DL_CreationAdapter adapter;// 创建线段adapter.createLine(0, 0, 1, 1);// 创建圆形adapter.createCircle(2, 2, 1.5);return 0;
}

另一例子:

#include <iostream>// DL_CreationInterface 定义了创建图形对象的接口
class DL_CreationInterface {
public:virtual void createLine(double x1, double y1, double x2, double y2) = 0;virtual void createCircle(double x, double y, double radius) = 0;
};// DL_CreationAdapter 实现了 DL_CreationInterface 接口
class DL_CreationAdapter : public DL_CreationInterface {
public:void createLine(double x1, double y1, double x2, double y2) override {std::cout << "Creating a line from (" << x1 << ", " << y1 << ") to (" << x2 << ", " << y2 << ")" << std::endl;}void createCircle(double x, double y, double radius) override {std::cout << "Creating a circle at (" << x << ", " << y << ") with radius " << radius << std::endl;}
};// DL_RectangleCreator 继承自 DL_CreationAdapter,并实现了创建矩形的方法
class DL_RectangleCreator : public DL_CreationAdapter {
public:void createRectangle(double x, double y, double width, double height) {std::cout << "Creating a rectangle at (" << x << ", " << y << ") with width " << width << " and height " << height << std::endl;}
};int main() {// 使用 DL_RectangleCreator 创建矩形对象DL_RectangleCreator rectangleCreator;// 创建线段rectangleCreator.createLine(0, 0, 1, 1);// 创建圆形rectangleCreator.createCircle(2, 2, 1.5);// 创建矩形rectangleCreator.createRectangle(3, 3, 2, 1.5);return 0;
}

在这个示例中,我们创建了一个名为 DL_RectangleCreator 的子类,它继承自 DL_CreationAdapterDL_RectangleCreator 类新增了一个方法 createRectangle,用于创建矩形对象。在 main 函数中,我们实例化了 DL_RectangleCreator 对象并调用了其方法来创建线段、圆形和矩形对象,输出相应的信息。

通过这个示例,我们展示了如何在继承自 DL_CreationAdapter 的子类中扩展新的方法,以实现特定类型的对象创建。这种设计模式可以使代码更具灵活性和可扩展性。

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

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

相关文章

音视频入门基础:H.264专题(7)——FFmpeg源码中 指数哥伦布编码的解码实现

一、引言 由于视频的传输和存贮是十分在乎体积的&#xff0c;对于每一个比特&#xff08;bit&#xff09;都要格外珍惜&#xff0c;所以H.264中用到了多种熵编码来对原本的数据进行压缩。 比如Sequence Paramater Set&#xff08;sps / 序列参数集&#xff09;中&#xff0c;s…

pyqt的QWidgetList如何多选?如何按下Ctrl多选?

通过设置setSelectionMode(QAbstractItemView.MultiSelection)&#xff0c;可以实现QWidgetList的多选。 但是上述结果不太符合我们需求。设置多选模式后&#xff0c;只需鼠标点击就可以选择多个条目。 我希望按下Ctrl键时才进行多选&#xff0c;仅鼠标单击的话&#xff0c;只进…

bat命令 批处理 脚本 windows DOS

常见命令解释 命令示例&#xff1a; 文件1.bat echo offstart notepad.exe timeout /t 5 /nobreak start notepad.exe pause echo 当前时间【%time%】 timeout /t 5 /nobreak echo 延时时间【%time%】 pause echo off 执行bat文件的时候&#xff0c;cmd黑框里不显示批处理…

python获取快手账号列表数据

快手数据获取相对简单访问地址固定且不需要登录token 列表地址获取的固定接口 https://www.kuaishou.com/graphql 发送post请求注意每个快手账号对应的id import time from datetime import datetime import logging import json import pymysql import requests# 创建一个lo…

python爬虫之12306模拟登陆

python爬虫之12306模拟登陆 登录流程&#xff1a; 1、登录界面输入账号密码&#xff0c;点击立即登录 2、弹出手机验证界面&#xff0c;输入身份证后4位&#xff0c;点击获取验证码等待验证码后手动输入&#xff0c;点击确定登录 实现代码如下&#xff1a; #需求&#xff1…

CTE(公共表表达式)和视图在查询时的性能影响

在SQL查询优化和数据库设计中&#xff0c;CTE&#xff08;公共表表达式&#xff09;和视图都是常用的工具。尽管它们在功能和使用场景上有很多相似之处&#xff0c;但在查询性能方面可能存在显著差异。本文将探讨CTE和视图在查询时的性能影响&#xff0c;帮助您在实际项目中做出…

详细分析Springmvc中的@ModelAttribute基本知识(附Demo)

目录 前言1. 注解用法1.1 方法参数1.2 方法1.3 类 2. 注解场景2.1 表单参数2.2 AJAX请求2.3 文件上传 3. 实战4. 总结 前言 将请求参数绑定到模型对象上&#xff0c;或者在请求处理之前添加模型属性 可以在方法参数、方法或者类上使用 一般适用这几种场景&#xff1a; 表单…

Flutter有哪些优势,为什么稳定的大公司都向Flutter迁移?

Flutter作为Google开发的跨平台移动应用开发框架&#xff0c;具有一系列显著的优势&#xff0c;以下是对其优势的详细归纳&#xff1a; 跨平台开发能力&#xff1a; Flutter允许开发人员使用单一代码库创建适用于Android和iOS的应用程序&#xff0c;大大减少了开发和维护的工作…

发送HTTP请求并与一个假设的MES系统进行对接案例。

假设我们有一个MES系统&#xff0c;它提供了一个RESTful API用于获取订单信息。API的URL是https://api.mes-system.com/orders/{orderId}&#xff0c;其中{orderId}是一个占位符&#xff0c;需要替换为实际的订单ID。 以下是demo&#xff1a; using System; using System.Ne…

联想至像M3070DNA打印机加粉及清零方法

基本参数&#xff1a; 产品类型&#xff1a;黑白激光多功能商用一体机&#xff08;打印/复印/扫描&#xff09; 网络功能&#xff1a;支持有线网络打印 最大处理幅面&#xff1a;A4 双面功能&#xff1a;自动 打印速度&#xff1a;30页/分钟&#xff08;高速激光打印&…

sql-analysis

文章目录 痛点&#xff1a; 1、无法提前发现慢sql&#xff0c;可能恶化为慢sql的语句 2、线上出现慢sql后&#xff0c;无法快速止损 后果&#xff1a;一般是以响应时间来发现慢sql&#xff0c;这时候已经对业务产生了一定影响&#xff0c;这时候就要改代码重新发布上线或者改数…

HarmonyOS NEXT:华为开启全新操作系统时代

在全球科技浪潮的汹涌澎湃中&#xff0c;华为再次以创新者的姿态&#xff0c;引领了一场关于操作系统的革命。HarmonyOS NEXT&#xff0c;这一由华为倾力打造的分布式操作系统&#xff0c;不仅是对现有技术的一次大胆突破&#xff0c;更是对未来智能生活的一次深邃展望。 Harmo…

【耐水好】强耐水UV胶水是怎样的?

【耐水好】强耐水UV胶水是怎样的&#xff1f; 强耐水UV胶水是一种特殊的胶水&#xff0c;其设计重点在于其出色的耐水性能。以下是关于强耐水UV胶水的特点&#xff1a; 优异的耐水性能&#xff1a;这种胶水能在水环境下保持稳定的粘接强度&#xff0c;不易被水分解或削弱。因…

HarmonyOS鸿蒙应用开发基础知识

参考 HarmonyOS鸿蒙应用开发 (二、应用程序包结构理解及Ability的跳转&#xff0c;与Android的对比)_hap(harmonyos ability package)包的开发-CSDN博客 HarmonyOS NEXT下一代编程语言仓颉介绍及入门-CSDN博客 媒体模块&#xff1a; AVCodec Kit&#xff08;音视频编解码服务…

TextRank 算法

第1关&#xff1a;Jieba 在关键词提取中的应用 任务描述 本关任务&#xff1a;根据本关所学有关使用 Jieba 库进行关键词提取的知识&#xff0c;编写使用 Jieba 模块进行关键词提取的程序&#xff0c;并通过所有测试用例。 相关知识 为了完成本关任务&#xff0c;你需要掌握…

Grafana 对接 Zabbix 数据源API错误

介绍 主要报错为 Invalid params. Invalid parameter "/": unexpected parameter "user". 主要原因为Zabbix 6.4.0以上的版本更新了API&#xff0c;导致Grafana的数据源插件不兼容。 解决方案 更新到最新的Grafana 和 grafana-zabbix 插件即可。&#x…

react输入框输入的空格 样式 和输入后页面显示一致

为了确保在 React 输入框中输入的空格样式和输入后页面显示一致&#xff0c;你可以使用 CSS 的 white-space 属性来控制空格的显示。具体来说&#xff0c;可以使用 pre-wrap 值来保留空格和换行符。 import React, { useState, useEffect, useRef } from react; import ./App.…

uniapp生成微信小程序二维码

文章目录 一、获取不限制的小程序码1、第一步&#xff1a;需要先获取ACCESS_TOKEN2、第二步&#xff1a;获取微信小程序二维码 二、获取小程序码1、第一步&#xff1a;需要先获取ACCESS_TOKEN2、第二步&#xff1a;获取微信小程序二维码 三、扫普通链接二维码打开小程序1、协议…

反向代购是怎么火起来的?今后的发展趋势如何?

反向代购和反向海淘的兴起可以归因于多个因素&#xff0c;这些因素共同推动了海外消费者对中国商品的需求和购买热潮。以下是对其火起来的原因的详细分析&#xff1a; 海外华人华侨的需求增加&#xff1a; 随着中国国际移民群体的扩大&#xff0c;海外华人华侨数量不断增多。这…

关于wx.config报错 invalid url domain 及 invalid signature 错误原因及解决方式

wx.config的初始化配置 wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来&#xff0c;若要查看传入的参数&#xff0c;可以在pc端打开&#xff0c;参数信息会通过log打出&#xff0c;仅在pc端时才会打印。appId: res.data.data.appId, // 必…