设计模式(二) —— SOLID 原则

SOLID 原则

1. 单一职责原则 Single Responsibility Principle

当程序规模不断扩大、变更不断增加后,真实问题才会逐渐显现出来。到了某个时候,类会变得过于庞大,以至于你无法记住其细节。查找代码将变得非常缓慢,你必须浏览整个类,甚至整个程序才能找到需要的东西。程序中实体的数量会让你的大脑堆栈过载,你会感觉自己对代码失去了控制。

还有一点:如果类负责的东西太多,那么当其中任何一件事发生改变时,你都必须对类进行修改。而在进行修改时,你就有可能改动类中自己并不希望改动的部分。

如果你开始感觉在同时关注程序特定方面的内容时有些困难的话,请回忆单一职责原则并考虑现在是否应将某些类分割为几个部分。

2. 开闭原则 Open/closed Principle

对于扩展,类应该是“开放”的;对于修改,类则应是“封闭”的。本原则的主要理念是在实现新功能时能保持已有代码不变。

如果一个类已经完成开发、测试和审核工作,而且属于某个框架或者可被其他类的代码直接使用的话,对其代码进行修改就是有风险的。你可以创建一个子类并重写原始类的部分内容以完成不同的行为,而不是直接对原始类的代码进行修改。这样你既可以达成自己的目标,但同时又无需修改已有的原始类客户端。

子类不应该对其父类的问题负责。

阅读更多
设计模式(一) —— 类的关系

类,接口和实现类,多个类实现一个接口的 UML 图。

阅读更多
AI笔记系列(五)—— RooCode插件分析

目录


RooCode插件分析

本文基于官方文档、社区资料与实际体验,系统梳理RooCode插件的架构、功能、技术实现与典型工作流,并对比其前身Cline插件,帮助开发者快速了解和上手这一AI驱动的VSCode开发助手。


1. RooCode概述与官方信息

RooCode(前身为Roo Cline)是一个强大的VS Code插件,提供AI驱动的自主编码代理功能,能够在编辑器中直接与用户交互,帮助完成各种开发任务。

主要功能包括:

  • 🚀 生成代码:从自然语言描述生成代码
  • 🔧 重构和调试:重构和调试现有代码
  • 📝 编写和更新文档:创建和维护文档
  • 🤔 回答问题:解答关于代码库的问题
  • 🔄 自动化:自动化重复性任务
  • 🏗️ 创建:创建新文件和项目


阅读更多
AI笔记系列(四)—— 高德Mcp Server:打通AI与地图服务的桥梁阅读更多
AI笔记系列(三)—— Agent与多智能体系统

目录

AI笔记系列(三)—— Agent与多智能体系统

AI-Agent的基本概念

AI-Agent(智能代理)是一种能够自主感知环境、做出决策并采取行动以实现特定目标的智能系统。Agent的核心决策逻辑是让大语言模型(LLM)根据动态变化的环境信息选择执行具体的行动或者对结果作出判断,并影响环境,通过多轮迭代重复执行上述步骤,直到完成目标。

一个典型的Agent决策流程可以精简为:

  • P(感知)→ P(规划)→ A(行动)

其中:

  • 感知(Perception):Agent从环境中收集信息并提取相关知识的能力
  • 规划(Planning):Agent为了某一目标而作出的决策过程
  • 行动(Action):基于环境和规划做出的动作

在工程实现上,Agent通常拆分为四大核心模块:

  • 推理:使用LLM等模型进行思考和决策
  • 记忆:存储历史信息和知识
  • 工具:Agent可以调用的外部功能
  • 行动:执行具体操作的能力

目前Agent主流的决策模型是ReAct框架(Reasoning + Acting)及其变种,这种框架让Agent能够在思考和行动之间交替进行,从而更有效地完成复杂任务。

阅读更多
AI笔记系列(二)—— AI工作流实践

目录

AI笔记系列(二)—— AI工作流实践

工作流的基本概念

工作流(Workflow)简单来说就是”完成一件事的完整步骤”。它像一份”说明书”,告诉你为了达成目标,需要做什么、按什么顺序做、谁来做。工作流包含几个关键要素:

  • 输入 (Input): 工作流开始前需要”放进去的东西”,如做菜的食材,审批的文件,用户提出的问题
  • 过程 (Process): 工作流”中间的运转环节”,如烹饪步骤,生产工序,数据处理流程
  • 输出 (Output): 工作流”最终产生的结果”,如美味佳肴,审批通过的文件,智能机器人的回答

如果没有工作流,我们的工作可能会变得效率低下、错误频发、进度难以跟踪。但有了工作流,一切都会变得井然有序:重复工作自动化完成,流程规范化减少错误,工作进度清晰可见。

阅读更多
AI笔记系列(一)—— 现代AI产品形态解析

目录

AI笔记系列(一)—— 现代AI产品形态解析

随着人工智能技术的飞速发展,AI产品的形态也在不断演进。从简单的推荐系统到复杂的自主决策代理,AI产品正在重塑我们与技术交互的方式。本文将探讨当前主流的AI产品形态及其应用场景,帮助读者了解这一快速发展的领域。

AI模型特点对比

目前的模型体验,by 2025年04月30日

模型名称 主要优势 特点描述
Claude 3.7 编程能力 • 代码生成和调试能力强
• 上下文理解准确
• 技术文档编写专业
GPT-4 综合能力 • 推理能力强
• 创意写作出色
• 多领域知识丰富
DeepSeek 中文理解 • 中文语境理解准确
• 文学创作能力好
• 中国文化认知深入
豆包 对话能力 • 对话风格自然流畅
• 情感交互优秀
• 人设特征鲜明
通义千问 知识整合 • 知识图谱完整
• 逻辑推理严谨
• 专业领域表现稳定
阅读更多
RunLoop究竟是怎么运作的

解析RunLoop

RunLoop简介(Introduction)

  1. RunLoop是线程基础架构的一部分。RunLoop存在的目的是让线程在没有任务处理的时候进入休眠,在有任务处理的时候运行。

  2. RunLoop不是完全自管理的,需要你在适当的时候启动。

  3. Cocoa和Core Foundation框架都提供了RunLoop相关的API。

  4. 你不需要自己创建RunLoop对象。每个线程,包括主线程都有一个对应的RunLoop对象。

  5. 只有子线程的RunLoop需要手动启动,主线程的RunLoop在App启动调用Main函数时就已运行。

阅读更多
ReactiveCocoa笔记(二)—— 源码探究
  • 看完源码画的流程图:

RACSignal流程

理解RAC

初学者总是容易被一堆概念搞得晕头转向,我想其实无非是这几种:

1
2
3
4
5
6
RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber){
[subscriber sendNext:@(1)];
[subscriber sendCompleted];
return nil;
}];

  1、createSignal好难啊;
  2、subscriber是什么?
  3、这个block什么时候调用?

阅读更多
ReactiveCocoa笔记(一)—— 框架概览

对于一个应用来说,绝大部分的时间都是在等待某些事件的发生或响应某些状态的变化,比如用户的触摸事件、应用进入后台、网络请求成功刷新界面等等,而维护这些状态的变化,常常会使代码变得非常复杂,难以扩展。而 ReactiveCocoa 给出了一种非常好的解决方案,它使用信号来代表这些异步事件,提供了一种统一的方式来处理所有异步的行为,包括代理方法、block 回调、target-action 机制、通知、KVO 等:
然而,这些还只是 ReactiveCocoa 的冰山一角,它真正强大的地方在于我们可以对这些不同的信号进行任意地组合和链式操作,从最原始的输入 input 开始直至得到最终的输出 output为止

ReactiveCocoa解决的问题:

  1. 传统iOS开发过程中,状态以及状态之间依赖过多的问题
  2. 传统MVC架构的问题:Controller比较复杂,可测试性差
  3. 提供统一的消息传递机制
  4. RAC使用信号监听,类似OC中的KVO机制,使用Block聚合代码逻辑,所以被称为:函数响应式编程。
阅读更多