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

设计模式实战:图形编辑器的设计与实现

简介

本篇文章将介绍如何设计一个图形编辑器系统,系统包括图形对象的创建、组合、操作及撤销等功能。我们将通过这一项目,应用命令模式、组合模式和备忘录模式来解决具体的设计问题。

问题描述

设计一个图形编辑器系统,用户可以创建并操作图形对象,将多个图形对象组合成更复杂的图形,支持操作的撤销与重做。

设计分析

业务流程说明

整个图形编辑器系统的业务流程如下:

  1. 用户创建图形对象。
  2. 用户组合多个图形对象。
  3. 用户对图形对象进行操作(如移动、删除)。
  4. 用户撤销或重做操作。

流程图

创建图形对象
组合图形对象
操作图形对象
撤销操作
重做操作

模块依赖关系图

GraphicEditor
Shape
CompositeShape
Circle
Rectangle
Command
MoveCommand
DeleteCommand
CommandHistory
Memento
ShapeState

模式选择

图形对象设计
  • 模式选择:组合模式
  • 原因:组合模式适用于将对象组合成树形结构以表示部分-整体层次。图形对象可以看作树结构中的叶子节点,而组合图形可以看作树的根节点。使用组合模式能够方便地处理图形对象的组合和操作。
操作设计
  • 模式选择:命令模式
  • 原因:命令模式用于将请求封装成对象,使得可以用不同的请求、队列或者日志来参数化其他对象。图形编辑器需要支持操作的撤销与重做,使用命令模式可以将这些操作封装成独立的对象,从而使系统更灵活和易于扩展。
状态管理设计
  • 模式选择:备忘录模式
  • 原因:备忘录模式用于在不破坏封装性的前提下捕获并保存一个对象的内部状态,以便在以后恢复它。图形编辑器需要支持操作的撤销与重做,使用备忘录模式可以保存图形对象的状态并在需要时恢复。

详细设计与实现

数据模型

组合模式(图形对象)
import java.util.ArrayList;
import java.util.List;// 图形接口
interface Shape {void draw();void move(int x, int y);ShapeMemento saveState();void restoreState(ShapeMemento memento);
}// 圆形类
class Circle implements Shape {private int

相关文章:

设计模式实战:图形编辑器的设计与实现

简介 本篇文章将介绍如何设计一个图形编辑器系统,系统包括图形对象的创建、组合、操作及撤销等功能。我们将通过这一项目,应用命令模式、组合模式和备忘录模式来解决具体的设计问题。 问题描述 设计一个图形编辑器系统,用户可以创建并操作图形对象,将多个图形对象组合成…...

.NET 情报 | 分析某云系统添加管理员漏洞

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…...

vue检测页面手指滑动距离,执行回调函数,使用混入的语法,多个组件都可以使用

mixin.ts 定义滑动距离的变量和检测触摸开始的方法&#xff0c;滑动方法&#xff0c;并导出两个方法 sendTranslateX.value > 250 && sendTranslateY.value < -100是向上滑动&#xff0c;满足距离后执行回调函数func&#xff0c;并在一秒内不再触发&#xff0c;一…...

opencv 优势

OpenCV(开源计算机视觉库)是一个广泛使用的计算机视觉和机器学习软件框架。它最初由Intel开发,后来由Itseez公司维护,最终于2015年成为非营利组织OpenCV.org的一部分。OpenCV的目的是实现一个易于使用且高效的计算机视觉框架,支持实时视觉应用。 以下是关于OpenCV的一些关…...

1-如何挑选Android编译服务器

前几天&#xff0c;我在我的星球发了一条动态&#xff1a;入手洋垃圾、重操老本行。没错&#xff0c;利用业余时间&#xff0c;我又重新捣鼓捣鼓代码了。在接下来一段时间&#xff0c;我会分享我从服务器的搭建到完成Android产品开发的整个过程。这些东西之前都是折腾过的&…...

【JS逆向课件:第十六课:Scrapy基础2】

ImagePipeLines的请求传参 环境安装&#xff1a;pip install Pillow USER_AGENT Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36需求&#xff1a;将图片的名称和详情页中图片的数据进行爬取&a…...

使用 PowerShell 自动化图像识别与鼠标操作

目录 前言功能概述代码实现1. 引入必要的程序集2. 定义读取文件行的函数3. 定义加载图片的函数4. 定义查找小图像在大图像中的位置的函数5. 定义截取全屏的函数6. 定义模拟鼠标点击的函数7. 定义主函数 配置文件示例运行脚本结语全部代码提示打包exe 下载地址 前言 在日常工作…...

组队学习——支持向量机

本次学习支持向量机部分数据如下所示 IDmasswidthheightcolor_scorefruit_namekind 其中ID&#xff1a;1-59是对应训练集和验证集的数据&#xff0c;60-67是对应测试集的数据&#xff0c;其中水果类别一共有四类包括apple、lemon、orange、mandarin。要求根据1-59的数据集的自…...

【数据中心】数据中心的IP封堵防护:构建网络防火墙的基石

数据中心的IP封堵防护&#xff1a;构建网络防火墙的基石 引言一、理解IP封堵二、IP封堵的功能模块及其核心技术三、实施IP封堵的关键策略四、结论 引言 在当今高度互联的世界里&#xff0c;数据中心成为信息流动和存储的神经中枢&#xff0c;承载着企业和组织的大量关键业务。…...

LangChain的使用详解

一、 概念介绍 1.1 Langchain 是什么&#xff1f; 官方定义是&#xff1a;LangChain是一个强大的框架&#xff0c;旨在帮助开发人员使用语言模型构建端到端的应用程序&#xff0c;它提供了一套工具、组件和接口&#xff0c;可简化创建由大型语言模型 (LLM) 和聊天模型提供…...

Modbus转BACnet/IP网关快速对接Modbus协议设备与BA系统

摘要 在智能建筑和工业自动化领域&#xff0c;Modbus和BACnet/IP协议的集成应用越来越普遍。BA&#xff08;Building Automation&#xff0c;楼宇自动化&#xff09;系统作为现代建筑的核心&#xff0c;需要高效地处理来自不同协议的设备数据&#xff0c;负责监控和管理建筑内…...

万字长文之分库分表里无分库分表键如何查询【后端面试题 | 中间件 | 数据库 | MySQL | 分库分表 | 其他查询】

在很多业务里&#xff0c;分库分表键都是根据主要查询筛选出来的&#xff0c;那么不怎么重要的查询怎么解决呢&#xff1f; 比如电商场景下&#xff0c;订单都是按照买家ID来分库分表的&#xff0c;那么商家该怎么查找订单呢&#xff1f;或是买家找客服&#xff0c;客服要找到对…...

如何查看jvm资源占用情况

如何设置jar的内存 java -XX:MetaspaceSize256M -XX:MaxMetaspaceSize256M -XX:AlwaysPreTouch -XX:ReservedCodeCacheSize128m -XX:InitialCodeCacheSize128m -Xss512k -Xmx2g -Xms2g -XX:UseG1GC -XX:G1HeapRegionSize4M -jar your-application.jar以上配置为堆内存4G jar项…...

科研绘图系列:R语言TCGA分组饼图(multiple pie charts)

介绍 在诸如癌症基因组图谱(TCGA)等群体研究项目中,为了有效地表征和比较不同群体的属性分布,科研人员广泛采用饼图作为数据可视化的工具。饼图通过将一个完整的圆形划分为若干个扇形区域,每个扇形区域的面积大小直接对应其代表的属性在整体中的占比。这种图形化的展示方…...

ReadAgent,一款具有要点记忆的人工智能阅读代理

人工智能咨询培训老师叶梓 转载标明出处 现有的大模型&#xff08;LLMs&#xff09;在处理长文本时受限于固定的最大上下文长度&#xff0c;并且当输入文本越来越长时&#xff0c;性能往往会下降&#xff0c;即使在没有超出明确上下文窗口的情况下&#xff0c;LLMs 的性能也会随…...

构建智能:利用Gradle项目属性控制构建行为

构建智能&#xff1a;利用Gradle项目属性控制构建行为 Gradle作为一款强大的构建工具&#xff0c;提供了丰富的项目属性管理功能。通过项目属性&#xff0c;开发者可以灵活地控制构建行为&#xff0c;实现条件编译、动态配置和多环境构建等高级功能。本文将详细解释如何在Grad…...

如何通过smtp设置使ONLYOFFICE协作空间服务器可以发送注册邀请邮件

什么是ONLYOFFICE协作空间 ONLYOFFICE协作空间&#xff0c;是Ascensio System SIA公司出品的&#xff0c;基于Web的&#xff0c;开源的&#xff0c;跨平台的&#xff0c;在线文档编辑和协作的解决方案。在线Office包含了最基本的办公三件套&#xff1a;文档编辑器、幻灯片编辑…...

SQL labs靶场-SQL注入入门

靶场及环境配置参考 一&#xff0c;工具准备。 推荐下载火狐浏览器&#xff0c;并下载harkbar插件&#xff08;v2&#xff09;版本。hackbar使用教程在此不做过多描述。 补充&#xff1a;url栏内部信息会进行url编码。 二&#xff0c;SQL注入-less1。 1&#xff0c;判断传参…...

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号4

基础认证题库请移步&#xff1a;HarmonyOS应用开发者基础认证题库 注&#xff1a;有读者反馈&#xff0c;题库的代码块比较多&#xff0c;打开文章时会卡死。所以笔者将题库拆分&#xff0c;单选题20个为一组&#xff0c;多选题10个为一组&#xff0c;题库目录如下&#xff0c;…...

使用LSTM完成时间序列预测

c 在本教程中&#xff0c;我们将介绍一个简单的示例&#xff0c;旨在帮助初学者入门时间序列预测和 PyTorch 的使用。通过这个示例&#xff0c;你可以学习如何使用 LSTMCell 单元来处理时间序列数据。 我们将使用两个 LSTMCell 单元来学习从不同相位开始的正弦波信号。模型在…...

开源金属四足机器人MEVIUS2设计与实现解析

1. MEVIUS2&#xff1a;开源金属四足机器人设计解析四足机器人技术近年来取得了显著进展&#xff0c;从实验室走向了实际应用场景。作为一名长期从事机器人系统开发的工程师&#xff0c;我特别关注如何降低这类先进机器人的研发门槛。MEVIUS2项目正是这一领域的突破性尝试——它…...

docker-maven-plugin 源码解析:深入理解插件架构与实现原理

docker-maven-plugin 源码解析&#xff1a;深入理解插件架构与实现原理 【免费下载链接】docker-maven-plugin Maven plugin for running and creating Docker images 项目地址: https://gitcode.com/gh_mirrors/doc/docker-maven-plugin 一、插件核心架构概览 docker-…...

Python 虚拟环境完全指南:venv、virtualenv 与 Conda

Python 虚拟环境完全指南&#xff1a;venv、virtualenv 与 Conda 目录 虚拟环境概述venv 模块详解virtualenv 工具详解Conda 环境管理详解三者对比分析总结与建议 1. 虚拟环境概述 1.1 什么是虚拟环境 虚拟环境是一个独立的 Python 运行环境&#xff0c;它允许你在同一台机…...

3406硬核量化总结:黄大年茶思屋34期5题全解 重塑华为全球全栈技术霸权战略

华夏之光永存・硬核总结:黄大年茶思屋5题全解对华为战略的决定性价值 一、华为核心战略:全栈自主可控,构建端边云网芯一体化技术霸权 华为的核心战略是根技术全自研、全链路闭环、全场景覆盖,以芯片为底座、网络为联接、操作系统为中枢、AI为引擎、云为载体、行业应用为出…...

突发模式光功率监控技术解析与实现

1. 突发模式光功率监控的技术挑战与解决方案在光通信系统中&#xff0c;发射功率监控是确保模块稳定运行的关键技术。传统连续模式下的监控方案通过简单滤波即可获取平均值&#xff0c;但在突发模式&#xff08;Burst Mode&#xff09;应用中&#xff0c;由于信号激活时间短且动…...

猫瘟爆发季,我为什么把全院空气消毒换成了净博阳?宠物医生手记

先说背景&#xff1a;我经营一家中型宠物医院&#xff0c;3个诊室、1个手术室、1个输液区、1个住院部&#xff08;15个笼位&#xff09;&#xff0c;日均接诊量30-40例。干过临床的同行都知道&#xff0c;宠物医院有一个隐形的生死线——院内交叉感染。你这边刚抢救回来一只猫瘟…...

从零搭建AI-ready数据管道:2026奇点大会现场复刻的3小时极速部署流水线(含LLM元数据自动标注模块)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生数据管道搭建&#xff1a;2026奇点智能技术大会数据工程实践 在2026奇点智能技术大会上&#xff0c;核心数据平台团队首次全栈落地了真正意义上的AI原生数据管道&#xff08;AI-Native Data Pipe…...

跟着 MDN 学 HTML day_34:(深入XML 中的 CDATASection 接口)

在 Web 开发的学习旅程中&#xff0c;我们大部分时间都在与 HTML 打交道。然而&#xff0c;当涉及到数据存储、配置文件或 RSS 订阅时&#xff0c;XML 依然扮演着不可或缺的角色。今天&#xff0c;我们将聚焦于 XML 世界中一个看似不起眼但在特定场景下极其有用的接口&#xff…...

3分钟掌握SPT-AKI存档编辑器的完整使用指南

3分钟掌握SPT-AKI存档编辑器的完整使用指南 【免费下载链接】SPT-AKI-Profile-Editor Программа для редактирования профиля игрока на сервере SPT-AKI 项目地址: https://gitcode.com/gh_mirrors/sp/SPT-AKI-Profile-Edi…...

Royal TSX中文汉化:解锁macOS远程管理的母语体验

Royal TSX中文汉化&#xff1a;解锁macOS远程管理的母语体验 【免费下载链接】Royal_TSX_Chinese_Language_Pack Royal_TSX的简体中文汉化包 项目地址: https://gitcode.com/gh_mirrors/ro/Royal_TSX_Chinese_Language_Pack 对于macOS平台的专业用户来说&#xff0c;Roy…...