重构改善既有代码设计----- 在对象之间搬移特性

2023-10-27

在对象之间搬移特性

 

       常常我们只要使用“搬移函数”、“搬移字段”就可以解决大部分问题了,再使用两个重构手法时,尽量先使用搬移字段,再搬移函数;如果一个类变得没有足够的逻辑,可以考虑把它内联到一个和它关联最强的类中;如果一个类做的太多的事情,不利于维护,可以考虑把它分解成更多的小类。

 

 

1、    搬移函数(Move Method)

       如果一个类里面的函数与另一个类更多的联系,那么就把这个函数搬移到另一个类中

2、    搬移字段(Move field)

       一个字段被其所驻类之外的另一个类引用更多,那么就把这个字段搬移到另一个类中

3、    提炼类(Extract class)

       一个类做了两个类的事情,应该从该类中提炼出一个新类,简化该类

4、    将类内联化(Inline Class)

       一个类没有承担足够的责任,没有独立存在的理由,应该将该类萎缩到最频繁使用该类的类上

5、    隐藏委托关系(Hide Delegate)

       将委托关系改成代理关系,因为委托关系使得客户端更深层次的耦合了服务

6、    移除中间人(Remove Middle Man)

       某个类做了过多的中间委托动作,则可以让客户端直接调用受托类

7、    引入外加函数(Introduce Foreign Method)

       需要为提供服务的类增加一个函数,但是你有无法修改这个类,则可以引入一个外加函数

8、    引入本地扩展(Introduce Local Extension)

       需要为提供服务的类增加一个函数,但是你有无法修改这个类,则可以引入一个外加类保存这个服务

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重构改善既有代码设计----- 在对象之间搬移特性 的相关文章

  • Vue中DOM的更新为什么是异步的?

    在 Vue 中 DOM 的更新是异步的机制是为了优化性能和提升用户体验 这个机制被称为 异步更新队列 Vue的异步更新队列机制是其实现高效渲染的关键 它通过将多次数据变化合并到一个批处理中 从而减少了不必要的DOM操作 提高了性能 下面是V
  • costmap 代价地图

    转自 https sychaichangkun gitbooks io ros tutorial icourse163 content chapter10 10 3 html 10 3 costmap costmap是Navigation
  • 嵩天老师的零基础Python笔记:https://www.bilibili.com/video/av13570243/?from=search&seid=15873837810484552531 中的...

    coding gbk 嵩天老师的零基础Python笔记 https www bilibili com video av13570243 from search seid 15873837810484552531 中的15 22讲 数字类型的
  • python批量发送带附件的邮件时,收到的附件名异常且后缀为bin,解决办法

    1 问题描述 在使用 Python 内置的模块 smtplib 发送带中文名的附件邮件时 数据可以正常传输 但是但收件人收到的附件格式是bin 附件名也不是发送时的名称 附注 smtp Simple Mail Transfer Protoc
  • 进一步理解angular

    在上一篇文章中我介绍了安装和结构 以及运行过程 https blog csdn net weixin 42603009 article details 94382945 我们进一步理解其中的数据单向 双向 组建传值 Modules等的理解
  • C语言编译过程、VIM常用命令

    一 编译过程 1 预处理 gcc E 源文件 c o 源文件 i 预处理宏以及注释 2 编译 gcc S 源文件 i o 源文件 s 通过编译转换为汇编文件 3 汇编 gcc c 源文件 s o 源文件 o 经汇编转换为二进制文件 4 链接
  • linux创建链接文件

    链接文件的创建 1 概念 链接文件就类似我们windows的快捷方式 只保留目标文件的地址 不占用存储空间 使用链接文件与使用目标文件的效果是一样的 2 为什么要使用链接文件 在windows都会把文件放在一个比较大的磁盘中 我们每次需要使
  • ChatGPT 速通手册——GPT 训练数据集介绍

    GPT 训练数据集介绍 所有人工智能算法都会分为训练和推理两步 算法的效果好坏 很大程度上取决于训练数据本身的质量 ChatGPT 所用的训练数据 openai 公司没有单独公布过细节 不过考虑到 ChatGPT 是在前序 GPT 算法基础
  • linux使用记录(一)

    1 tar 解压tar xvf file tar 解压 tar包 tar xzvf file tar gz 解压tar gz tar xjvf file tar bz2 解压 tar bz2 tar xZvf file tar Z 解压ta
  • 使用ADO.NET访问数据库

    一 ADO NET 数据库访问的方法和技术 二 ADO NEt的重要组件 1 DataSet 独立于数据源的数据访问 2 Net framework数据提供程序 用于连接到数据库执行命令和检索结果 三 NET数据提供程序的四个核心对象 1
  • 无向图——邻接表和邻接矩阵的实现

    邻接矩阵 include
  • 封装七牛云存储工具类

    文章目录 封装七牛云存储工具类 为啥选择七牛云 当然是因为它能免费使用喽 白嫖怪哈哈哈 图片存储方案 Java SDK操作七牛云 封装工具类 封装七牛云存储工具类 为啥选择七牛云 当然是因为它能免费使用喽 白嫖怪哈哈哈 图片存储方案 在实际
  • UnityShader——Compute Shader

    Compute Shader是基于DX11 SM4 5 的在GPU上运行的程序 通过Compute Shader我们可以将大量可以并行的计算放到GPU中计算从而节省CPU资源 Unity 5 6版本提供的 Graphics DrawMesh
  • U盘数据丢失是什么原因?轻松让U盘数据恢复的教程

    在数字化时代 我们不可避免地使用各种便携式存储设备 如U盘 来传输和存储重要数据 然而 有时我们可能不小心删除了U盘中的文件 或者格式化了U盘等等而导致数据丢失 这种情况下 你可能会困惑地想知道 是否有简单的方式可以快速而轻松地恢复U盘中丢
  • 解决报错:You don‘t have enough free space in /var/cache/apt/archives/.

    apt安装package时遇到问题 You don t have enough free space in var cache apt archives 问题 var 目录下空间不足 apt下载时没有地方存放缓存文件 解决方法 删除部分日志
  • Java中解决CAS机制出现的ABA问题

    Java中解决CAS机制出现的ABA问题 学习目标 Java中解决CAS机制出现的ABA问题 1 先了解一下什么是CAS 2 CAS的底层原理 3 CAS的问题 4 怎么解决ABA问题 1 先了解一下什么是CAS 一句话总结就是 比较并交换
  • 分库分表需要考虑的问题及方案

    转自 http www jianshu com p 32b3e91aa22c from timeline 分库分表需要考虑的问题及方案 作者 jackcooper 2017 02 08 16 08 字数 5042 阅读 5240 评论 3
  • 【手写一个RPC框架】simpleRPC-06

    目录 前言 实现 zookeeper安装与使用 项目创建 依赖配置 register client service server common codec 文件结构 运行 本项目所有代码可见 https github com weiyu z
  • Lock锁和Condition条件

    Lock的特性 Lock不是Java语言内置的 synchronized是在JVM层面上实现的 如果代码执行出现异常 JVM会自动释放锁 但是Lock不行 要保证锁一定会被释放 就必须将unLock放到finally 中 手动释放 在资源竞

随机推荐

  • OSPF协议

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 HCIA第四天 前言 一 OSPF协议 二 LAS优化 特殊区域 1 解决OSPF的不规则区域 三 扩展配置 前言 一 OSPF协议 OSPF 开放式最短路径优先协议 无类别
  • spring boot 将对象转换为json返回

    Spring Boot默认使用Jackson将对象转换为json 需要配置以下依赖 compile group com fasterxml jackson core name jackson core version 2 9 4 compi
  • matlab实现kmeans聚类算法

    kmeans聚类算法是一种简单实用的聚类算法 matlab自带函数kmeans可直接对数据进行kmeans聚类 为了方便更好地掌握kmeans聚类算法 今天我们自己来实现一个弱化的版本mykmeans mykmeans输入包含三项 分别为聚
  • 【数据结构】图-图的遍历_广度优先遍历(动态图解、c++、java)

    文章目录 一 概述 二 广度优先搜索 图解 BFS树 代码 邻接矩阵实现 邻接表实现 链式前向星实现 三 完整代码 邻接矩阵版 邻接表版 链式前向星版 四 总结 算法复杂度分析 基于邻接矩阵的 BFS 算法 基于邻接表的 BFS 算法 注意
  • 【Mac】一些软件的图片和视频位置 QQ 微信

    1 QQ 在finder的菜单项中 前往 文件夹 输入 Library Containers com tencent qq Data Library Caches Videos QQ还是比较流氓的 其中光images下的文件就有5G 他会把
  • 【日常笔记】linux系统docker的操作安装启动卸载

    安装linux系统 阿里云镜像下载centos7 选择dvd iso镜像 找到 docker ce 也就是社区免费版本下载 以上都有官方文档说明 就不再写出来了 配置阿里云镜像加速器 全部安装完毕后找到阿里云 gt 容器镜像服务 gt 镜像
  • 使用nginx部署vue项目后,刷新会找不到页面解决解决方法

    当使用Nginx部署Vue项目时 刷新页面可能导致无法找到页面的问题 这是由于Vue Router使用了前端路由的方式导致的 要解决这个问题 你可以进行以下配置 1 在Nginx配置文件中添加一个位置 Location 块来处理所有的URL
  • STL-常用算法(二.拷贝 替换 算术 集合)

    开篇先附上STL 常用算法 一 的链接 STL 常用算法 一 遍历 查找 排序 小梁今天敲代码了吗的博客 CSDN博客 目录 常用拷贝和替换算法 copy函数示例 将v1容器中的元素复制给v2 replace函数示例 将容器中的20 替换成
  • [carla] carla-ros-bridge 修改信号灯行为。

    本教程适用于采用编译下载安装方式安装carla ros bridge 的用户 1 修改信号灯 1 1 修改原理 我们要通过API过滤出所有绿灯的actor信息 然后修改他们的状态为常绿 查阅API网站可知traffic light具有set
  • java获取两个字符串日期之间间隔的天数

    java获取两个字符串日期之间间隔的天数 import java text ParseException import java text SimpleDateFormat import java util ArrayList
  • spyder 如何执行需要命令行参数的脚本

    spyder 如何执行需要命令行参数的脚本 run CTA py splash image C Users XXX Desktop A3 jpg weights D KerasProject MaskRCNN mask rcnn ballo
  • Detectron2入门教程

    参考 Detectron2入门教程 云 社区 腾讯云 目录 1 概述 1 1 自己的源码阅读流程 1 2 目录结构 1 3 搭积木过程 1 4 官方文档阅读 2 数据处理 2 1 概述 2 2 基本流程 2 3 build detectio
  • CoordinatorLayout详解二:

    作为Material Design风格的重要组件 CoordinatorLayout协调多种组件的联动 实现各种复杂的效果 在实际项目中扮演着越来越重要的角色 本篇博客将由浅到深 带你一起玩转CoordinatorLayout 官方文档对C
  • SpringBoot通过HttpClient方式调用Restful接口

    前言 HttpClient相比于传统jdk自带的URLConnection 增加了易用性和灵活性 它不仅是客户端发送http请求变得容易 而且也方便了开发人员测试接口 提高了开发的效率 HttpClient是Apache Jakarta C
  • No Network Security Config specified, using platform default

    报错日志 No Network Security Config specified using platform default 在日志中看 这个并没有报红 但是网络请求不成功 确实是这个引起的 可笑的是 在模拟器上 虽然报了这个警告 但是
  • 免费图片在线压缩网站推荐

    第一种 https img top PNG压缩过后依旧透明太棒 亲测 几乎无损 完全免费界面清新简洁 优点 实用 支持 JPG PNG GIF 等格式无损压缩 缺点 5MB限制 超过5MB无法压缩 第二种 http www 660660 t
  • 启动物联网项目所需的一切:关于流处理

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 在本文中 我们将围绕物联网或流处理系统的一些技术问题建立完整的基础和多方面的理解 以便读者在规划物联网系统时能够做出明智的决策或是有根据地提出问题 我们的意图是为开始考虑流处理和物联
  • Panel三维数据结构丨Pandas数据分析基础(5)

    个人主页 互联网阿星 格言 选择有时候会大于努力 但你不努力就没得选 作者简介 大家好我是互联网阿星 和我一起合理使用Python 努力做时间的主人 如果觉得博主的文章还不错的话 请点赞 收藏 留言 支持一下博主哦 行业资料 PPT模板 简
  • 二叉树的遍历和统计二叉树中度为0、度为1、度为2的结点个数

    文章目录 实验五 树的应用 二叉树的遍历 一 实验目的 1 了解二叉树的逻辑结构和物理结构 2 掌握二叉树数据类型定义 3 熟练掌握二叉树在链式存储结构上的遍历操作 二 实验要求 三 实验任务 四 代码如下 五 实验结果图 实验五 树的应用
  • 重构改善既有代码设计----- 在对象之间搬移特性

    在对象之间搬移特性 常常我们只要使用 搬移函数 搬移字段 就可以解决大部分问题了 再使用两个重构手法时 尽量先使用搬移字段 再搬移函数 如果一个类变得没有足够的逻辑 可以考虑把它内联到一个和它关联最强的类中 如果一个类做的太多的事情 不利于