- 博客(10)
- 收藏
- 关注
原创 上帝类与长方法:从坏味道到优雅设计
本文探讨了代码坏味道(God Class和Long Method)的危害及重构方法。文章指出,代码本质是写给人读的,而非机器执行。通过分析800+行的CommonUtils类案例,作者展示了如何通过拆分职责、引入门面模式、模块化设计来治理"上帝类";针对长方法问题,提出结构化思维、提取方法、简化嵌套等重构技巧。最终强调:1)每个类应专注单一职责;2)代码需保持层次清晰;3)重构需结合业务持续改进。这些方法能显著提升代码可读性、可维护性和可测试性。
2025-10-28 15:43:18
883
原创 Python中的上下文管理器(Context Managers):优雅地管理资源
本文介绍了Python中上下文管理器的概念及使用方法。通过实现__enter__和__exit__方法,可以创建自定义上下文管理器来管理资源,确保资源正确释放。文章对比了传统文件处理方式和使用with语句的优雅方式,并展示了如何通过类和contextlib.contextmanager装饰器两种方式实现上下文管理器。文中还提供了实际应用场景,如数据库会话管理和计时器等,最后给出了两个作业示例:测量代码执行时间和临时修改环境变量。上下文管理器能有效简化资源管理代码,提高程序健壮性。
2025-08-15 13:41:38
1226
原创 装饰器和闭包
本文深入探讨了Python装饰器的核心概念和应用场景。装饰器是一种在不修改函数代码的情况下增强其行为的强大工具,其核心依赖是闭包机制。文章首先介绍了装饰器的基础知识,包括执行时机、闭包原理和nonlocal关键字的作用。随后详细讲解了参数化装饰器的实现方法,并通过大量示例展示了装饰器在日志记录、性能测试、事务处理和缓存等场景中的实际应用。文章还涵盖了标准库中的@cache、@lru_cache等常用装饰器,以及如何实现权限校验等高级功能。最后提供了相关学习资源的参考,帮助读者全面掌握这一Python高级特性
2025-08-15 13:40:37
569
原创 从一个温度监控系统的演化,看观察者与事件总线 —— 解耦与开闭原则的实战应用
本文介绍了温度监控系统从硬编码到观察者模式再到事件总线的架构演进过程。初始版本直接将温度采集、报警等逻辑耦合在TemperatureSensor类中,导致修改困难、违反单一职责原则。通过引入观察者模式,将温度传感器与被观察者解耦,实现了报警、急停等功能的灵活扩展。最后针对多类型传感器场景,采用事件总线模式,通过事件类型分类和优先级控制,实现了更高程度的解耦和可维护性。三种架构对比显示,事件总线模式在解耦程度、扩展性和顺序控制方面表现最优,适合中大型系统。文章强调架构演进应根据实际需求逐步优化,最终目标是构建
2025-08-15 10:25:00
730
原创 让汽车跑在铁轨上——适配器模式
适配器模式是一种结构型设计模式,用于解决接口不兼容问题。它通过创建一个中间适配器类,将一个接口转换成客户端期望的另一个接口。典型应用场景包括:1)兼容不同数据库驱动,统一参数名、占位符和返回结果格式;2)日志系统改造,通过适配器将旧日志接口适配到新日志系统。该模式的核心优势在于解耦、扩展性强和代码复用,使系统能够灵活应对接口变化而不影响业务逻辑。关键实现步骤包括定义目标接口、创建适配器类完成接口转换,并通过依赖注入方式使用适配器。
2025-08-15 10:23:26
911
原创 排序算法
https://mp.weixin.qq.com/s/vn3KiV-ez79FmbZ36SX9lg10大排序算法见上链接。package sort;import java.util.Arrays;class Sort{ public int[] selectsort(int[] a) { //选择排序 //首先在未排序序列中找到最大元素,存放到排序序列的末尾位置 ...
2019-09-01 16:50:21
169
原创 两个有序链表生成新的有序链表
直接贴代码了。package com.progress;//两个有序链表生成一个有序链表class Linknode{ int val; Linknode next; public Linknode(int x ) { // TODO Auto-generated constructor stub val = x; } }class Myclass{ pu...
2019-09-01 14:42:05
308
原创 无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "...
2019-08-31 16:28:35
227
原创 JAVA链表的数相加
class Linknode { int val; Linknode next; Linknode(int x){ val = x; }}class Myclass { public Linknode generate(int a[]){ Linknode l1 = new Linknode(0); ...
2019-08-28 20:11:39
613
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅