༺༽༾ཊ—设计-七个原则-模式—ཏ༿༼༻

第一原则:单一职责

        一个类只负责一个功能领域中的相应职责;

接下来我们举一个代码例子,主要的功能实现是:

        在主函数中运行调用描边工具和填充工具画矩形与圆形

首先写一个圆形类,里面只有一个方法用来返回string类型的"圆形"

再拓展一个矩形类,同样里面只有一个方法用来返回string类型的"矩形"

再写一个枚举类,用来存放两个子类,变向作为基类

写一个画图的工具类,里面有两个方法实现"描边"和"填充"两个功能

最后主函数调用类

运行实现:

虽然实现了功能,但第一违反了七个原则中的单一原则

        代码中if里做了一件事情,else if也做了一件事情,也就是Stroke这个方法已经做了两件事情,同样Fill方法也做了两件事情,这样职责就不单一了。

        代码中不仅违反了单一职责,而且在Stroke方法和Fill方法中出现了两次创建矩形实例,出现了代码冗余。

接下来我们对Graphics类进行一些优化:

        这里我们将创建对象实例提取,并且把每一个功能只写成一个方法,从而实现单一职责。

但这样虽然满足了单一职责,扩展性却不是很好,也就是说比如我们需要扩展添加(new)一个三角形类,不仅需要在Graphics类中提取创建一个三角形类,还要新增两个方法(StrokeTriangle与FillTriangle)

如果想解决这种难于拓展的问题,我们可以进行以下优化:

我们可以新增抽象基类Shape

修改两个子类继承Shape基类

修改Graphics类:

        这样写既满足了单一职责(一个方法一个功能)也同时满足了可拓展性(因为Stroke方法和Fill方法只接收形状类型,去完成功能,也就是说不管哪种类型传进来我都执行,这样如果再写一个三角形类,需要让三角形描边或者填充时,就不用再写三角形填充方法和三角形描边方法了,只需要把新增的三角形类传进描边方法和填充方法即可)。

最后修改主函数调用类

运行同样实现了功能,但符合了七个原则中的单一原则,并且提高了代码的可拓展性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创意交融:集成自定义报表和仪表盘设计器,实现图标替换

前言 在现代数据分析领域,随着对报表和数据分析的需求不断增长,市场上涌现了许多嵌入式报表工具。这些工具能够与企业现有的OA、ERP、MES、CRM等应用系统深度集成,实现对业务数据的自助式分析。然而,在实际应用中,不同…

微信小程序定义并获取日志/实时log信息

步骤一:开通实时日志 可以在开发者工具->详情->性能质量->实时日志,点击前往,在浏览器打开we分析界面: 也可登录小程序管理后台,点击统计进入we分析: 在we分析界面找到性能质量,打开实…

C++(9.5)——浅谈new和delete的实现原理

(注:本文是针对上篇文章中C内存管理的两个关键字)两个关键字原理的解析,对于这两个关键字的使用并没有什么影响,如果只想得知两个关键字的使用方法,则可以直接跳过本篇文章) 目录 1. 引入: 2.operator new 与 operat…

Fruit Market

此包包含194 个水果预制件,可随时用于您的下一个项目或游戏(并且对移动设备友好!)。所有模型都是低多边形的,带有精美的手绘纹理。技术细节 纹理尺寸 - 256x256、512x512、1024x1024 网格数量 - 149 材料数量 - 50 纹理数量 - 每个分辨率尺寸 50资产列表菠萝: 64 - 768 tr…

Unity之物理系统

专栏的上一篇角色控制器控制角色移动跳崖,这一篇来说说Unity的物理系统。 本篇小编还要带大家做一个碰撞检测效果实例,先放效果图:流星撞击地面产生爆炸效果 一、Rigidbody 我们给胶囊添加了 Rigidbody 组件它才有的重力,我们来…

Linux环境搭建FastDFS文件服务器(附带Nginx安装)

本文主要介绍在linux服务器如何搭建FastDFS文件服务器。大概分为9个步骤,由于内容较为繁琐。下面带你入坑! 首先简单介绍一下FastDFS是淘宝资深架构师余庆老师主导开源的一个分布式文件系统,用C语言编写。适应与中小企业,对文件不…

芯片烧写工具

问题描述 最近出了一个机器变砖的问题,一些用户使用的设备,头一天晚上用的好好的,第二天来一上电开机就起不来了。 然后就寄回来,返厂维修。一些是因为部分电子器件坏了,还有一些是文件系统问题,重新升级一…

4、Redis高并发分布式锁实战

引言 在分布式系统中,保证数据的一致性和避免竞争条件是至关重要的。分布式锁是一种常用的机制,而Redis作为一款高性能的内存数据库,提供了简单而强大的分布式锁方案。本文将深入探讨如何利用Redis高并发分布式锁来解决分布式系统中的并发控…

【机器学习300问】8、为什么要设计代价函数(损失函数)?它有什么用?

一、先介绍一下线性回归模型 (1)基本概念理解 文字解释:线性回归模型顾名思义,他处理的回归问题,是监督学习的一种。线性回归模型是一种预测模型,其基础是假设目标值和输入值之间存在线性关系。通过一条最…

[zabbix] zabbix监控其他

一、温习zabbix自定义监控 二、zabbix 自动发现与自动注册 2.1 zabbix 自动发现 //zabbix 自动发现(对于 agent2 是被动模式) zabbix server 主动的去发现所有的客户端,然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数…

71.网游逆向分析与插件开发-角色数据的获取-修复角色名与等级显示问题

内容参考于:易道云信息技术研究院VIP课 上一个内容:自动化助手UI显示角色数据-CSDN博客 码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:0049452c079867779…

vue3+vite项目构建时报错npm ERR! code EPERMnpm ERR! syscall mkdir...

vscode终端中输入npm create vitelatest vueviteproject1 -- --vue命令后报错 具体报错如下: PS D:\project> npm create vitelatest vueviteproject1 -- --vue >> npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path D:\node\node_cache\_cac…

【软件测试】前端性能测试工具原理

不同于后端性能测试知识的琐碎、独立,这篇文章为你介绍前端性能测试工具WebPagetest,以一个具体网站为例,和你分析WebPagetest的用法,以及前端性能相关的主要概念与指标。 WebPagetest功能简介 WebPagetest,是前端性…

基于VGG-16的检测并清除杂草

目录 1 简介:检测并清除杂草 1.1 问题描述: 1.2 预期解决方案: 1.3 数据集: 1.4 图像展示: 2 数据预处理 2.1 数据集结构 2.2 部分数据分析 2.3 提取数据集 2.4 数据增强 2.5 构建数据集 3 使用VGG-16识别杂草图片 …

山海鲸:助力企业实现内外数据整合与价值挖掘

作为山海鲸的开发者,我们深知数字化转型对于企业发展的重要性。在不断钻研如何提升山海鲸可视化这款免费产品的实用性同时,也在不断推出各行实用解决方案,本文将介绍山海鲸企业数字化转型发展解决方案,探讨如何通过数据驱动创新&a…

WSL不同版本的Ubuntu更换清华镜像,加速Ubuntu软件下载速度

文章目录 不同版本的Ubuntu使用清华镜像,加速Ubuntu软件下载速度1. 备份源软件配置文件2. 复制镜像源3. 修改软件源配置文件4. 更新软件包列表,升级软件包等内容5. 从仓库中下载其它软件可能存在的问题 不同版本的Ubuntu使用清华镜像,加速Ubu…

Tuxera2024版本正式上线!(免费mac读写磁盘工具)

当您获得一台新 Mac 时,它只能读取 Windows NTFS 格式的 USB 驱动器。要将文件添加、保存或写入您的 Mac,您需要一个附加的 NTFS 驱动程序。Tuxera 的 Microsoft NTFS for Mac 是一款易于使用的软件,可以在 Mac 上打开、编辑、复制、移动或删…

【Dart】=> [03] Dart初体验-基础语法(运算符-算术-赋值-比较-逻辑-

目录 能够使用常用运算符操作数据算术运算符赋值运算符比较运算符逻辑运算符 能够使用常用运算符操作数据 学习内容: 算术运算符赋值运算符比较运算符逻辑运算符 算术运算符 用于实现基本的算术运算 常用算术运算符: 加、减、乘、除、取整、取模、自…

2023.1.15 关于 Redis 持久化 RDB 策略详解

目录 Redis 持久化 Redis 实现持久化的两大策略 RDB 策略 手动触发 save 命令 bgsave 命令 bgsave 命令执行流程 自动触发 rdb 文件 实例演示一 实例演示二 实例演示三 实例演示四 RDB 策略的优缺点 Redis 持久化 什么是持久化? 回答: 将数据存…

纯c实现顺序表 数据结构大全

我们已经知道数组是连续的内存地址,顺序表是由数组为基础的一种数据结构,拥有比数组更多的功能,在概念上属于线性结构,跟链表不同的是,顺序表在物理结构上也是线性的 什么是数据结构? 当我们想要使⽤⼤量使…