- 博客(151)
- 收藏
- 关注
原创 设计模式学习[16]---备忘录模式
我们学习以及工作中经常会遇到很多事情要做,但是一次性又记不了那么多,所以需要一个备忘录,记录一下我们后续要做的是什么。但是吧,在设计模式里面,这个备忘录模式不是这个意思。它更像是,打游戏要存档,一个存档点。具体是个什么事儿,我们来看看。备忘录模式更适合保存原发器对象中的一部分(不是所有)内部状态,如果需要保存原发器对象的所有内部状态,就应该采用原型模式进行原发器对象的克隆来取代备忘录模式。
2025-01-20 17:27:00
1052
原创 设计模式学习[15]---适配器模式
这个模式其实在日常生活中有点常见,比如我们的手机取消了3.5mm的接口,只留下了一个Type-C的接口,但是我现在有一个3.5mm的耳机接口,那怎么让耳机和手机相连?当然是买个转接头或者转接线,一头是3.5mm圆孔一头是type-c接口。那这里的转接头或者转接线,充当的就是适配器。我手机只有type-c的接口,现在要让3.5mm的插头适配type-c,就需要这个适配器。这篇博客就写一下适配器模式,看看在软件开发里面,什么时候用适配器,又是怎么用的适配器。
2025-01-05 15:31:00
1191
原创 设计模式学习[14]---状态模式
状态模式,乍一听名字其实好像很好理解的样子,状态嘛,人在不同状态会有不同的行为模式。那软件的状态模式又是什么样子的?根据一个变量的值,执行不同的业务处理。这个变量的值有很多类型,不同的类型就是不同的状态。上面是我对状态模式的初次印象,那么具体是个什么情况,接着往下看。状态模式什么时候用?一般在下面两种情况:(1)对象的行为取决于其状态,该对象需要根据其状态来改变行为(2)一个操作中含有庞大的条件分支语句,而这些分支语句的执行依赖于对象的当前状态。
2025-01-05 15:30:42
1071
原创 设计模式学习[13]---抽象工厂模式+简单工厂+工厂方法模式回顾
简单工厂与工厂方法这篇博客主要讲抽象工厂模式。工厂这个大模式的意义最主要还是在于做到软件开发过程中的开闭原则,三种工厂一般作用 的范围不太一样,下面说一下三者的区分和总结。简单工厂模式最简单,工厂方法次之,抽象工厂模式最复杂。把简单工厂模式中的代码修改得符合开闭原则,就变成了工厂方法模式,修改工厂方法模式的代码使得一个工厂支持对多个具体产品的生产,就变成了抽象工厂模式。
2024-12-17 23:19:15
1111
原创 设计模式学习[12]---观察者模式
这篇博客讲一下观察者模式,它属于行为型设计模式。这个模式从名字上来说,其实也挺好理解。观察一个东西变不变,变了怎么样?大概就是监视某个变量发生改变,接着做出动作。那具体是怎么样?往下看吧。观察者模式很常用,属于行为型设计模式的一种。其实有点像是《计算机组成原理》《计算机组成原理》《计算机组成原理》里面的中断方式,有事情了,喊一下CPU处理一下。这个观察者模式就是,有事情了通知一下观察者,处理一下。
2024-12-17 23:18:48
1531
原创 设计模式学习[11]---建造者模式
建造者模式属于创建型模式,原型模式与工厂模式也归属于这一类。创建型模式的特点在于,创建新对象,关于创建对象这个概念,在原型模式里面阐述过,创建对象是要深拷贝的,而不是简单的给个引用,指针之类的,这种是没有内存复制的。下面来看看建造者模式又有什么特点?建造者模式适合于那种流程相对固定,且最后的需求是创建对象的场景。当然了,它本身是一个创建者模式,不创建对象的话,那就不能称之为创建者模式了。建造者模式两个点,流程固定,依赖倒置。
2024-11-28 19:55:38
918
原创 设计模式学习[10]---迪米特法则+外观模式
之前有写到过依赖倒置原则,这篇博客中涉及到的迪米特法则和外观模式更像是这个依赖倒置原则的一个拓展。设计模式的原则嘛,总归还是高内聚低耦合,下面就来阐述一下本篇文章的法则与模式迪米特法则也好,外观模式也罢。总而言之就是把一些不相关的类,用一个高层接口,包一层,管理起来,一起调用。做到接口统一,类与类之间高内聚低耦合。
2024-11-28 19:55:16
1333
原创 设计模式学习[9]---模板方法模式
大型的C++项目,都会用到很多模板,C++中关于模板的书也不少,那么在设计模式中的模板模式和C++的模板又有什么区别呢?模板和上篇的原型又有哪些不同?这篇博客就详细介绍一下。我们在开发的时候遇到一些共性的业务流程,如果一味的用最简单的逻辑去做,往往是代码量大了,但是重复,冗余。代码质量很低,同时显得自己的水平也不高。模板方法模式是一种代码复用技术,遇到这种大量重复冗余的情况,多想想设计模式,用多态的思想去处理问题,代码水平更上一层楼。
2024-11-23 15:29:43
880
原创 设计模式学习[8]---原型模式
这个设计模式第一次听到,以为有点类似于软件工程中的一个开发模式,原型化开发模式。原型化开发是软件开发的一种常用方法。开发人员对用户提出的问题进行总结,就系统的主要需求取得一致意见后,开发出一个原型并运行之,然后反复对原型进行修改,使之逐步完善,直到用户对系统完全满意为止。后来看了下资料,发现在设计模式里面,这个模式和软件开发的原型化开发还有有些不同的。原型模式和工厂模式一样,都是属于创建型模式。前者更倾向于有大量相同的属性的对象创建,后者更适配于不同类型这种。
2024-11-21 19:49:00
1306
原创 通过QAxObject关闭已经打开的指定名称的Word文档
这篇博客的意义是记录一下删除文件出现异常的处理,由于网上没看到合适的解决方案,所以这里做一个记录。
2024-10-31 22:18:46
743
原创 设计模式学习[7]---工厂方法模式
关于工厂的一些概念,我在1,2两节中有提及,这里不过多数赘述,详情参考下面两篇博客。设计模式学习[1]—开篇词+简单工厂模式设计模式学习[2]—策略模式+简单工厂回顾我们通过工厂方法模式,将不同类型对象的实例化直接交给客户端,从而让底层的代码解耦,满足开放-封闭原则。最近几个模式好像都是涉及到了开放-封闭原则,对于各种原则秉持一个想法:多用,多思考。
2024-09-18 21:49:08
1041
原创 设计模式学习[6]---代理模式
代理这个词,从小到大听过不少。比如什么代理服务器,代理商,代理人之类的。通俗来说,代理无非无非就是我代表你处理事务的意思。那么在设计模式中,针对类的操作,要代理执行其实也有这么一个模式,就是这篇博客要写的代理模式了。这篇博客讲的代理模式原理比较简单,从代码层面来说就是用一个类A通过接口OP去调用另一个类B的操作,避免让类C直接和A接触。有一种间接的调用效果。
2024-09-18 21:48:42
968
原创 设计模式学习[5]---装饰模式
近期在给一个已有的功能拓展新功能时,基于原有的设计类图进行讨论。其中涉及到了装饰模式,因为书本很早已经看过一遍,所以谈及到这个名词的时候有点印象,只知道它是加功能用的,更细则的内容已经忘了。这篇博客就是对装饰模式的一个复习。装饰模式看书的时候看的挺快的,但是想用自己的话写出来,还是得好好想想。这篇博客对装饰模式做了一个自我理解的阐述,结合书中的例子进行分阶段设计,最后到代码的具体展现。收获尚可。
2024-09-08 19:29:45
1157
原创 设计模式学习[4]---依赖倒置原则+里氏代换原则
在给发新功能模块之前,都先要画UML类图进行需求分析。对每一个类的作用,类与类之间的关系做一个详细的阐述。确定好基本的框架之后,才会进行编码。很多时候一个项目拿过来,设计的时间比编码的时间会更长,编码更多的是按照设计来实现。难度上比设计上小一些。有一个项目,在讨论UML类图的时候,当时涉及到一个类与类之间互相依赖的例子,当时架构师和我说依赖倒置,我一脸懵逼。后来看了书,再结合当时的讨论,才后知后觉。本节就讲讲依赖倒置原则。
2024-08-25 16:17:28
1164
1
原创 设计模式学习[3]---单一职责原则+开放封闭原则
小项目写多了,比如一些什么管理系统之类的,在接触大型项目的时候往往会将之前的一些面向过程的写法代入。比如UI以及逻辑处理都放在一个类里面,UI里面加什么,我这个类里面加什么,改什么。代码改多了之后,对于新的需求,有很大概率需要重构代码,因为要处理的地方太多了。软件讲究高内聚,低耦合,便于拓展,模块化。之前这些存在于书本上的概念,在实际开发中,是真真切切的用得上的。对于上面的情况,这篇博客写一下处理方式。单一职责模式以及开放封闭原则,其实很大程度上不能做到完全遵守。
2024-08-20 22:53:19
772
原创 平衡日常工作与提升式学习话题有感
这篇博客是针对程序员如何平衡日常编码工作与提升式学习?这个话题进行的个人观点阐述,个人所思所想罢了。刚毕业没几年,水平有限,仅结合自己的经历写写吧。我的观点总结一下就是:尽吾志也而不能至者,可以无悔矣。抛开装X文学,就是努力干吧,怎么干都不行了,实在尽力了,那就可以了。写了点自己这个二十出头的年级的认知,希望若干年后回过头来看自己留下的文字,会有些许欣慰吧。
2024-08-20 22:53:03
1031
1
原创 C/C++ 多线程[1]---线程创建+线程释放+实例
这篇博客写一下多线程的一个demo。多线程还是很有用的,C++程序员进阶的必通之路。大学里面学的那些小玩意儿,单线程就能搞定所有,真正的大型项目,还是会有很多多线程相关的。记住这个多线程demo的简单使用,那么后面进一步拓展就手到擒来了。
2024-08-17 18:55:24
1230
原创 C/C++ 拷贝构造函数 | 赋值构造函数 | 移动构造函数 | 移动赋值构造函数
C++中关于一个对象的构造,就有很多讲究。其中最常用的可能就是拷贝构造函数和赋值构造函数。后面的移动相关的就用的很少,每次面试的时候会刷一下面经,突击一下概念,工作中用到少了,久而久之就忘了。这篇文章就对与一个对象的几种构造方式做一个总结。1.拷贝构造函数 用于创建一个新对象作为现有对象的副本。2.赋值构造函数 用于将一个对象的值赋给另一个已经存在的对象。3.移动构造函数 用于将资源从一个临时对象转移到新对象中,避免不必要的资源复制。
2024-08-17 18:54:27
2036
2
原创 设计模式学习[2]---策略模式+简单工厂回顾
上一篇讲到简单工厂模式。在我的理解中工厂的存在就是,为了实例化对象。根据不同条件实例化不同的对象的作用。这篇博客写的策略模式,可以说是把这个根据不同情况实例化不同对象的这个过程再一次封装了。简而言之就是,策略模式对变化进行了封装。有点迷。且听我娓娓道来。在看策略模式的时候,我其实挺奇怪它和简单工厂有什么区别。因为看书中的代码感觉变化不是很大。
2024-07-21 21:10:08
1058
原创 UML的六大关系---泛化、实现、关联、聚合、组合、依赖
讲到设计模式,就会有UMLUMLUML类图这个东西。一开始就很难理解各种线啥意思,这里做一个笔记记录一下。同时如果我的设计专栏博客里面对类图有些问题的话,这里可以做一下回顾。六种关系的熟悉是学习设计模式的基础。这里做一个记录,后面如果有遗忘,做一个回顾。
2024-07-21 21:09:32
1168
原创 香橙派Kunpeng Pro开箱测评:入门体验使用与基础测试
香橙派Kunpeng Pro 的openEuler系统其实本质上来说也是一个linux操作系统,在指令上面和树莓派其实并没有太大的变化。所以其实用习惯了树莓派,切换过来用香橙派Kunpeng Pro也非常方便。关于硬件部分上面的阐述也非常的详细,主要还是工作环境的问题以及暴露接口和板子大小的问题,这个要根据工业的实际运用考虑。在容量方面,香橙派Kunpeng Pro可谓是诚意满满,内存以及磁盘空间的大小真的是甩树莓派一条街。由于是国产的,其实也不用太考虑断供之类的问题,可靠性有很大保障。
2024-07-14 17:59:27
1305
原创 C/C++ BM35 判断是不是完全二叉树
明白完全二叉树的定义之后,根据特性来进行遍历即可。难的地方在于DFS和BFS吧二叉树的常规解法是递归,但这里递归我一开始也尝试过,只能处理同一条分支的情况,无法比较左右两侧。二叉树的遍历通常使用层次遍历或者深搜遍历。
2024-07-14 17:43:28
977
原创 设计模式学习[1]---开篇词+简单工厂模式
前段时间把《大话设计模式》这本书看完了,这篇专栏就考虑结合这本书,加上自己的理解,回顾一下自己的设计模式,写一点学习笔记。
2024-07-14 17:42:48
862
原创 C/C++ BM30 二叉搜索树与双向链表
这道题要明白二叉搜索树的概念,同时还要对链表的知识比较熟悉。回顾了一下中序遍历,对二叉搜索树的理解更进一步。
2024-05-03 14:23:51
1105
原创 C/C++ BM33 二叉树的镜像
镜像说的好听,无非就是换下节点。主要还是用递归来做。看了下官方的题解,还有个是栈的,感觉差不多,这里就没贴了。思路都是一样的。
2024-05-02 13:58:02
1011
原创 C/C++ BM32 合并二叉树
树的题目大概率是要用到递归的,将一个树的问题拆分成子树的问题,不断拆分。这题也用到了递归的思想。树相关的东西,几种遍历方式要烂熟于心。还有就是递归一般都是优先解法。
2024-05-02 13:57:22
1207
原创 在Gtiee搭建仓库传代码/多人开发/个人代码备份---git同步---TortoiseGit+TortoiseSVN
正常企业的大型项目都会使用SVN和云端的代码仓库(或者局域网自建的云仓库)进行开发。极少数的小公司,尤其是对代码不负责的小公司,让员工自己在公司电脑上备份,多人协同开发的时候还是直接拷贝代码的那种。不幸,这样的小公司我待过一年。这篇博客的目的如标题所示,记录一下自己从头到尾搭建仓库,同时方便后续自己学习研究写代码。这篇博客主要记录一下工作中常用的一个TortoiseGit+TortoiseSVN的工作方式,一直都是摸索着使用。这篇博客就系统的整理一下如何搭建这么一个仓库,平时怎么使用。
2024-04-21 15:38:13
1405
原创 C/C++ BM28 二叉树的最大深度
这个最大深度就是DFS搜索的概念了,每个路径都搜索,看一下那条路径最长。最长的路径就是最大深度了。树的遍历加上递归的使用,将问题进行拆分,是二叉树的一种精髓了。
2024-04-20 17:22:44
696
原创 QT中对于QPushButton样式的调整
前段时间在调软件的样式,学到了些新的东西,也碰到了些问题,这里做一下记录。这篇博客主要实现的目标就如标题所示。这样我们想要的基本元素就有了,文字和按钮图标。这篇博客主要对QPushButton的样式调整以及自己对一些样式概念的理解,其他的按钮控件也可以参考这个。对于样式真的没什么统一的说法,不同需求,不同人的调法都不一样,需要自己去琢磨。这个比较费时间,但是确实好看啊。
2024-04-20 13:29:08
3480
原创 C/C++ BM21 旋转数组的最小数字
查找算法的适用条件以及找到题目最核心的诉求是解决问题的关键。遇到有序数列的一种查找,如果对时间复杂度有要求,要考虑二分查找。
2024-04-14 14:01:34
909
原创 C/C++ BM25二叉树的后序遍历
和前序遍历中序遍历一致,换个顺序就行。详情参考C/C++ BM23 二叉树的前序遍历详情参考C/C++ BM24 二叉树的中序遍历明白了前序和中序遍历,这个后序遍历也非常简单。
2024-04-14 14:01:05
1216
原创 C/C++ BM24二叉树的中序遍历
中序遍历和前序遍历的不同地方简单改过就是根的位置不同罢了。具体参考C/C++ BM23 二叉树的前序遍历明白了前序遍历,这个中序遍历无非就是换个顺序的问题。
2024-04-14 13:59:59
819
原创 C/C++ BM23 二叉树的前序遍历
自己在草稿纸上模拟这个遍历的过程比较简单,但是转移到代码上就突然会懵逼。这个在我之前学数据结构,做到这个实验的时候觉得很难理解。最近虽然已经入职了,但是刷刷题巩固一下基础的时候,还是会受益良多。数据结构的东西有时候比较抽象,算法思想到代码的转换需要自己好好琢磨。之前做算法题的时候,觉得很奇怪,为什么讲算法原理,明白了,但是具体上手题目的时候,就是一脸懵逼,告诉你怎么写了,还是不会写。究其本质就是写到少,想的少;事必躬亲可能才是唯一解吧。
2024-04-14 13:59:37
898
原创 C/C++ BM20 数组中的逆序对
除了最常规的暴力破解,还要根据题意考虑更优质解答。最近整理了一下各种排序的算法,暂时还没整理到归并排序,所以这里第一优化的反应是考虑用二分查找的方式,但是二分查找一般涉及到有序的数列。这里还是不符合。这里我们想要的是一种分治的思想,所以归并排序会更好。
2024-03-10 14:40:31
879
原创 C/C++ BM19 寻找峰值
这道题第一遍做的时候题目条件没有好好的审阅,导致在判断边界问题的时候出了不少岔子。我的方法是时间复杂度为O(N)的,官方的logN可能更好一些。我的就是简单的遍历判断求解,官方用的是二分查找的方式。多画一画图,注意边界。同时要看清题目意思,看懂每个条件。
2024-03-10 14:40:01
1186
原创 C/C++ BM18 二维数组中的查找
这道题主要是题目要求的时间复杂度和空间复杂度怎么处理,最简单的暴力那就是全部遍历一遍,虽然也能过,但是不符合题意。查找题要看清题目给的,除了常见的二分,用暴力有时候也可以,更多的还要考虑题目的特殊性。
2024-02-24 11:27:13
1027
原创 C/C++ BM16 删除有序链表中重复的元素-II
这道题和BM15稍有些差别,一开始做的时候还是按照BM15的方法来做,结果想了半天发现自己路走窄了。这道题也是删除节点的方式,不过可能出现删除或者说跳过节点数不固定的情况,这种情况在处理的时候,我一开始用一个变量来保存要处理的节点个数,最后发现,这样做很麻烦,要考虑多种情况。BM15与BM16属于同类型问题,BM16是进阶。这类问题主要在于删除节点的操作,链表中删除节点涉及到当前节点的删除和下一个节点的删除大致这两种情况。
2024-02-23 09:44:53
1254
在Gtiee搭建仓库传代码/多人开发/个人代码备份-git同步-TortoiseGit+TortoiseSVN
2024-04-22
基于STM32CubeMX和keil采用RTC时钟周期唤醒和闹钟实现LED与BEEP周期开关
2023-11-19
基于STM32CubeMX和keil采用USART/UART实现非中断以及中断方式数据回环测试借助CH340以及XCOM
2023-11-04
基于STM32CubeMX和keil采用SPI通信实现轮询方式读写W25Q128获取设备ID
2023-08-20
linux安装eclipseCDT对应的jdk和eclipseCDT安装包
2023-05-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人