自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 《设计模式之禅》笔记摘录 - 1.六大设计原则

本文介绍了软件设计中的六大原则:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则和开闭原则。单一职责原则强调类或接口应只有一个职责;里氏替换原则要求子类能够替换父类而不影响程序行为;依赖倒置原则提倡高层模块和低层模块都应依赖抽象;接口隔离原则建议接口应尽量细化,避免臃肿;迪米特法则主张类间应保持低耦合,减少不必要的依赖;开闭原则则强调系统应对扩展开放,对修改关闭。这些原则共同指导开发者设计出高内聚、低耦合、易于维护和扩展的软件系统。

2025-05-18 21:34:14 1017

原创 《重构》笔记摘录 - 9.处理继承关系

即便在子类继承是合理的建模方式的情况下,如果子类与超类之间的耦合过强,超类的变化很容易破坏子类的功能,我还是会使用以委托取代超类。除了“子类用得上超类的所有函数”之外,合理的继承关系还有一个重要特征:子类的所有实例都应该是超类的实例,通过超类的接口来使用子类的实例应该完全不出问题。直实世界的分类结构可以作为设计继承关系的提示,但还有很多时候,合理的继承关系是在程序演化的过程中才浮现出来的:我发现了一些共同元素,希望把它们抽取到一处,于是就有了继承关系。对于不同的变化原因,我可以委托给不同的类。

2025-04-26 10:32:18 857

原创 《重构》笔记摘录 - 8.重构API

不使用以查询取代参数最常见的原因是,移除参数可能会给函数体增加不必要的依赖关系——迫使函数访问某个程序元素,而我原本不想让函数了解这个元素的存在,这种“不必要的依赖关系”除了新增的以外,也可能是我想要稍后去除的,例如为了去除一个参数,我可能会在函数体内调用一个有问题的函数,或是从一个对象中获取某些原本想要剥离出去的数据。不过,将函数封装成自己的对象,有时也是一种有用的办法。在浏览函数实现时,我有时会发现一些令人不快的引用关系,例如,引用一个全局变量,或者引用另一个我想要移除的元素。这种函数的测试也更容易。

2025-04-20 16:26:02 734

原创 《重构》笔记摘录 - 7.简化条件逻辑

一个常见的场景是:我可以构造一组类型,每个类型处理各自的一种条件逻辑。在带有复杂条件逻辑的函数中,代码(包括检查条件分支的代码和真正实现功能的代码)会告诉我发生的事,但常常让我弄不清楚为什么会发生这样的事,这就说明代码的可读性的确大大降低了。和任何大块头代码一样,我可以将它分解为多个独立的函数,根据每个小块代码的用途,为分解而得的新函数命名,并将原函数中对应的代码改为调用新函数,从而更清楚地表达自己的意图。我必须编写代码来检查不同的条件分支,根据不同的条件做不同的事,然后,我很快就会得到一个相当长的函数。

2025-04-13 17:13:52 603

原创 《重构》笔记摘录 - 6.重新组织数据

如果我想在几个对象之间共享一个对象,以便几个对象都能看见对共享对象的修改,那么这个共享的对象就应该是引用。两者最明显的差异在于如何更新内部对象的属性:如果将内部对象视为引用对象,在更新其属性时,我会保留原对象不动,更新内部对象的属性;有一种合理的例外情况:如果计算的源数据是不可变的,并且我们可以强制要求计算的结果也是不可变的,那么就不必重构消除计算得到的派生变量。一如既往地,我在一个软件上做的工作越多,对数据的理解就越深,所以很有必要把我加深的理解融入程序中。记录结构中的字段可能需要改名,类的字段也一样。

2025-04-12 22:45:21 680

原创 《重构》笔记摘录 - 5.搬移特性

若果真如此,最好的办法是先用内联函数合并双方的内容,调整语句的顺序,再提炼出新的函数来,以形成更合适的边界。当然,我可能需要检查函数的所有调用点,判断它们是否都应该使用新的实现,但通常很少需要这么仔细,即便需要,也总好过四处寻找相似代码。同样,如果我在整理代码时,发现需要频繁调用一个别处的函数,我也会考虑搬移这个函数。一个适应于问题域的良好数据结构,可以让行为代码变得简单明了,而一个糟糕的数据结构则将招致许多无用代码,这些代码更多是在差劲的数据结构中间纠缠不清,而非为系统实现有用的行为。

2025-04-02 22:47:06 738

原创 《重构》笔记摘录 - 4.封装

一个好的模块化的设计,“封装”即使不是其最关键特征,也是最关键特征之一。本文介绍《重构》中与封装相关重构手法的基本概念。

2025-03-26 21:07:03 741

原创 《重构》笔记摘录 - 3.最常用的一组重构

只在一行的lambda表达式中使用的变量,跟踪起来很容易,像这样的变量,我经常只用一个字母命名,因为变量的用途在这个上下文中很清晰。到底应该封装什么,以及如何封装,取决于数据被使用的方式,以及我想要修改数据的方式。从道理上来说,只用提炼函数也能避免重复,但孤立存在的函数常常很难找到,只有把函数和它们操作的数据放在一起,用起来才方便。每当看见一段代码在同时处理两件不同的事,我就想把它拆分成各自独立的模块,因为这样到了需要修改的时候,我就可以单独处理每个主题,而不必同时在脑子里考虑两个不同的主题。

2025-03-22 21:53:06 874

原创 《重构》笔记摘录 - 2.代码坏味道

写下的代码应该直观明了。整洁代码最重要的一环就是好的名字,所以我们会深思熟虑如何给函数、模块、变量和类命名,使它们能清晰地表明自己的功能和用法。改名不仅仅是修改名字而已。如果你想不出一个好名字,说明背后很可能潜藏着更深的设计问题。为一个恼人的名字所付出的纠结,常常能推动我们对代码进行精简。

2025-03-09 15:51:15 705

原创 《重构》笔记摘录 - 1.重构的原则

重构(名词):对软件内部结构的一种调整,目的是在不改变软件可观察行为的提下,提高其可理解性,降低其修改成本。重构(动词):使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。重构的关键在于运用的步骤,一步步达成大规模的修改。每个单独的重构要么很小,要么由若干小步骤组合而成。

2025-03-02 21:56:33 901

原创 在linux环境上安装tomcat记录

tomcat是一种Java写的Web应用服务器,也被称为Web容器,专门运行Web程序。tomcat启动了之后会在操作系统中生成一个Jvm(Java虚拟机)的进程,从配置监听端口(默认8080)监听发来的HTTP协议的消息。

2024-11-24 21:47:54 462

原创 windows下C++配置googletest过程记录

在build文件夹下打开powershell,执行以下命令进行编译。在googletest目录中创建build文件夹。编译完成后会在build文件夹下生成若干文件。其中的文件路径要按实际情况处理。以两数之和为例,完整文件如下。

2024-07-06 21:25:57 986 1

原创 Java单元测试使用PowerMockito打桩Thread.sleep和TimeUnit.xxx.sleep

在业务代码中,会有需要线程sleep的情况,通常会使用和时当前线程暂停执行。但是在编写单元测试时,如果不对sleep方法进行打桩,会导致单元测试执行时间过长。

2024-06-15 23:40:54 2144

原创 React使用serve -s启动服务失败,提示SyntaxError: Unexpected token ‘.‘ 问题解决

在React项目中,使用npm run build命令编译后,尝试通过serve -s build启动服务。

2024-05-31 00:05:02 777

sqlite-tools-win-x64-3460000

sqlite 3.46 windows x64 使用参考:https://www.runoob.com/sqlite/sqlite-installation.html 来源:https://www.sqlite.org/download.html

2024-06-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除