自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 软件设计模式|软件设计模式笔记|桥接模式(Bridge Pattern)

在数学中,我们学过一道经典的题目:又两种图形,正方形和圆形,又有两种颜色,红色和蓝色。如果上面想要使用上述图形和颜色进行组合,能有几种不同的组合方式?答案必然是4种,即2*2=4。如果我们使用构造类来实现上述功能(不使用桥接),那么我们就需要定义4个构造类。如果增加图形种类,或者增加颜色种类,如8种图形8种颜色,难不成要构造64个类吗?显然这是不可行的。

2025-11-21 17:56:48 290

原创 软件设计模式|软件设计模式笔记|创建型模式总结|优缺点、适用场景、使用方法

当需要创建一组相关或依赖的对象时,比如创建一套UI组件(按钮+文本框),并支持不同主题(Light/Dark)。它提供一个接口来创建一系列相关对象,而不指定具体类。模式主要区别(与其他模式)使用方法要点优点缺点适用场景示例单例专注于唯一实例,不涉及产品族或复杂构建;与其他模式不同,它不创建新对象,而是复用单一对象。静态方法获取实例。资源节省,全局访问。全局状态难测试,多线程复杂。配置管理器。工厂方法每个工厂对应一种产品;区别于抽象工厂(一组产品);区别于建造者(不关注构建过程)。

2025-11-17 14:33:23 828

原创 软件设计模式|软件设计模式笔记|原型模式(Prototype)

原型模式也是一种创建型模式,它用来复制一个现有的对象,而不是通过实例化创建一个新的对象。用一句话总结就是,当 new 一个对象很复杂或者开销很大(比如需要访问数据库或者文件系统),可以通过复制一个已经存在的实例来创建新对象,从而提高性能。其中,“已存在的实例”就是指原型对象。

2025-11-12 17:39:10 672

原创 软件设计模式|软件设计模式笔记|生成器模式(Builder)(建造者模式)

生成器模式是一种创建型设计模式,用于将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。允许你逐步构建一个产品对象,而不需要一次性提供所有参数,从而提高灵活性和可读性。生成器模式的意图是解决复杂对象的创建问题,尤其是当对象有许多可选参数或构建顺序重要时。它避免了“ telescoping constructor”(telescoping 构造函数,即构造函数参数过多导致的代码膨胀)问题。

2025-11-09 19:36:25 393

原创 软件设计模式|软件设计模式笔记|代理模式(Proxy)

代理是设计模式中的“万金油”,但要根据需求选择变体。

2025-11-09 17:55:06 913

原创 软件设计模式|软件设计模式笔记|装饰模式(Decorator)

复习一下,工厂模式是创建对象的,策略模式是选择算法的,而装饰模式是给对象添加功能的,而且添加的功能是动态的,而不是静态的,意思就是说我们可以在运行时根据需要添加或移除功能。

2025-10-16 16:22:15 986

原创 软件设计模式|软件设计模式笔记|策略模式

title: 软件设计模式-策略模式。

2025-10-15 17:15:33 388

原创 软件设计模式|软件设计模式笔记|工厂方法模式速通

可能很多人在平常编写代码的过程中,已经或多或少地使用了工厂方法模式,但是并不知道:哦,原来这就是工厂方法模式,那么在读了这篇文章后,你将对以往的代码有了更深入的了解,在之后编写类似功能代码的时候,能灵活地用这个思维创造代码。(PS:《设计模式》(中文版)这本书真的好难读,思维跳跃例子难以理解,当然也可能是我读代码能力还不够精炼 -。-)

2025-10-08 16:48:05 1024

原创 软件设计模式|软件设计模式笔记|扉页

最近在学习软件设计模式,本来以为这是一门比较简单的课程,但是在做第一章的作业时,感到非常吃力(😓),遂决定记一下笔记帮助学习这门实际上非常重要的课程。

2025-10-03 17:47:59 219

原创 软件设计模式|软件设计模式笔记|前言

在学习之前,我会介绍一些名词。由于本人学习面向对象程序设计已经是一年前的了,所以在介绍的过程中,我会从一个初学者的角度介绍,尽可能有所帮助-接口:对象内部是被_封装_的,客户只能通过对象的方法来访问或操作对象内部的数据,对象本身对外部不可见。而所有的操作只能通过接口来进行。-类型:标识特定接口的一个名字。一个对象可以有许多给类型,不同对象也可以共享同一个类型。当A类型的接口包含类B型的接口时,我们称A类型为B类型的子类型,B类型为A类型的超类型。子类型继承了超类型的接口。

2025-10-03 17:45:37 697

原创 算法训练|AT_chokudai_S001_h LIS|LIS|单调栈+DP与DP两种方法

我们维护一个数组d,d[i]表示长度为i的最长上升子序列的最后一个元素的最小值。接着,遍历数组 a[],如果a[i]>=d[top],那么a[i]压入d[]中,top++。否则,用a[i]替换d[j],其中0<j<top且d[j-1]<a[i]<d[j]。即在i之前的所有比a[i]小的元素中,选择一个dp[j]最大的,然后加一。遇到1:替换第一个1 → s = [1, 2, 4]遇到5:大于4 → s = [1, 2, 4, 5]数列:[3, 1, 2, 4, 1, 5]遇到1:替换3 → s = [1]

2025-09-30 20:02:43 575

原创 算法总结|排序算法|快速排序|归并排序|堆排序

十大经典排序算法详解个人博客迁移至jiaoandy.github.io。

2025-09-11 16:44:50 279

原创 算法训练|贪心|LeetCode122. 买卖股票的最佳时机 II

给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候只能持有股票。你也可以先购买,然后在出售。返回你能获得的利润。7在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。

2025-09-02 18:17:17 404

原创 算法训练|Day3|LeetCode 142. 环形链表 II(Floyd判圈)|能否用系数k自适应快慢指针差值|Brent方法

快指针:初始步长为step_limit=1,每次移动step_limit后,检查是否和慢指针相遇,如果没有相遇,step_limit*=2,并将慢指针移动到快指针的位置,直到快指针到达链表尾(无环)或者快慢指针相遇(有环)举一个例子,首先假设慢指针进入环的时候,快指针与慢指针的距离为D,如果环大小L为4,D为1。想象带环链表中的环是操场,其他部分是教学楼到操场的距离,如果甲乙同学同时下楼,v甲=2v乙,那么甲乙相遇说明一定有操场,很好理解。当它们相遇则说明有环。快指针移动两格,慢指针移动一个,这是为什么?

2025-08-09 22:42:13 671

原创 算法训练|Day2|离散化|区间和(前缀和)

通俗来讲,离散化就是在不改变原有数组相对大小的基础上,将分散开的数整合到一个相对较小的数组中。这道题中,我们需要将无限长的数组里面后插入的数离散化,以便于查找目标区间的左右边界。(映射)

2025-08-08 23:01:26 834 2

原创 算法训练|Day1|LeetCode 59. 螺旋矩阵 II

给你一个正整数n,生成一个包含1到所有元素,且元素按顺时针顺序螺旋排列的n x n正方形矩阵matrix。

2025-08-07 22:16:06 194

原创 算法训练|Day 1|LeetCode 209. 长度最小的子数组

滑动窗口本质上是一个双指针问题,结合队列的思想:窗口内部看作一个队列,不要的值从左面出去,难点在于把二重循环转化成单个循环。

2025-08-07 17:01:29 315

空空如也

空空如也

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

TA关注的人

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