- 博客(148)
- 资源 (3)
- 问答 (1)
- 收藏
- 关注
原创 libsoup 调用http API报错 unacceptable TLS certificate
原因:libsoup使用gio-network的gnutls后端,默认查找证书在/opt/homebrew/etc/gnutls/cert.pem下,部分mac不存在这个证书文件。解决:将/opt/homebrew/etc/gnutls/cert.pem证书打包到程序中,在代码中将证书设置到SoupSession的tls-database属性上。问题:通过soup_session_send调用http api报错 “unacceptable TLS certificate”
2025-11-20 14:57:34
311
原创 Web调用本地程序:Custom URL Scheme
Windows:通过注册表实现;Linux:通过.desktop文件和xdg-mime实现;验证方法:需要在HTML 链接或 JS 脚本中调用,而不是直接在地址栏输入。自定义协议方案简单高效,适合只需要启动本地程序并传参的场景,是在 Web 与本地应用之间打通的最常见方式。
2025-08-26 14:18:44
890
原创 Sublime Text 禁止更新弹窗
试过在配置文件关闭更新检查,首选项(preferences)-》设置(setting)Sublime Text 每次打开都会出现更新弹窗,非常烦。缺点:无法访问sublime text官网,不过问题不大。然后重新打开sublime text,无更新提示!直接在/etc/hosts 文件中加入下面两行。
2025-08-04 14:43:42
480
原创 设计模式 | 传输对象模式
性能优化:最大化单次传输数据量架构简化:减少层间耦合数据一致性:保证关联数据原子性网络友好:减少远程调用次数扩展灵活:支持复杂数据结构适用场景远程方法调用(RPC)层间大数据传输微服务间通信报表系统数据传递API响应封装"传输对象是数据的容器,它穿越层与服务的边界,背负着高效与一致的使命。
2025-07-12 09:00:00
351
原创 设计模式 | 服务定位器模式
架构灵活性:运行时动态替换服务实现代码简洁性:消除冗余的服务初始化代码资源高效性:集中管理服务实例生命周期可测试性:轻松替换测试替身可维护性:服务配置集中化管理适用场景需要动态切换服务的系统多实现可插拔的架构全局服务访问点管理遗留系统现代化改造微服务架构中的客户端负载均衡"服务定位器是架构的交通枢纽,它不生产服务,而是服务的搬运工,让组件各司其职、高效协作。
2025-07-12 08:45:00
1148
原创 设计模式 | 拦截过滤器模式
架构灵活性:动态组合处理流程功能可扩展:轻松添加新处理功能代码纯净度:业务对象专注核心逻辑统一管理:集中配置处理规则复用最大化:过滤器跨场景复用适用场景Web应用请求预处理/后处理API网关请求转换安全处理管道数据处理流水线需要动态处理流程的系统"拦截过滤器是请求处理的装配线,每个工位专注特定任务,共同构建高效处理流水线。
2025-07-11 08:45:00
1693
原创 设计模式 | 前端控制器模式
架构统一性:标准化请求处理流程关注点分离:解耦业务与基础设施逻辑集中管控:统一安全、日志等横切关注点扩展灵活:易于添加新功能和扩展点维护简化:公共逻辑集中管理适用场景Web应用框架设计API网关实现微服务入口点单页应用后端需要统一请求处理流程的系统"前端控制器是Web应用的指挥中心,它决定了请求的命运轨迹,是现代Web架构的支柱设计。
2025-07-11 08:30:00
949
原创 设计模式 | 数据访问对象模式
架构清晰度:明确分离业务与数据访问职责技术灵活性:支持无缝切换持久化方案维护便捷性:数据访问变更影响范围最小化可测试性:业务逻辑可脱离数据库测试性能优化点:集中实现缓存/批处理等优化适用场景需要支持多数据库的应用业务逻辑与数据访问解耦的系统需要简化数据访问测试的场景计划迁移数据存储技术的遗留系统"优秀的分层架构就像好酒,随时间推移价值倍增。DAO模式正是这分层艺术的关键配方。
2025-07-10 08:45:00
841
原创 设计模式 | 组合实体模式
业务完整性:确保关联对象的操作原子性架构清晰度:明确对象生命周期边界性能优化:减少分布式系统通信开销演化自由:内部重构不影响客户端适用场景需要原子操作的关联对象集合减少网络请求的分布式系统复杂领域模型的持久化管理需要统一生命周期的对象图“组合实体不是简单的对象容器,而是领域驱动设计中的聚合模式在分布式环境的具体实践。
2025-07-10 08:15:00
669
原创 设计模式 | 业务代表模式
简化客户端:隐藏服务访问复杂性弹性设计:内置容错和恢复机制统一入口:集中管理服务访问策略架构灵活性:支持服务动态发现和替换适用场景分布式系统服务访问需要服务抽象层的应用多协议服务环境需要集中式错误处理的系统"业务代表模式不是简单的代理,而是分布式系统的服务网关。它是客户端与服务之间的智能中介。
2025-07-09 08:45:00
630
原创 设计模式 | MVC模式
清晰分层:模型、视图、控制器各司其职解耦设计:业务逻辑与UI分离灵活扩展:支持多视图、多平台高效协作:团队并行开发适用场景任何具有用户界面的应用程序需要多种方式展示数据的系统长期维护的大型项目需要严格测试的业务逻辑"MVC不是框架,而是思考用户界面架构的方式。它是分离关注点的经典实践。
2025-07-09 08:30:00
999
原创 设计模式 | 访问者模式
访问者接口(Visitor)声明visit方法,对应每种具体元素类型方法命名通常为visit+元素类名具体访问者(Concrete Visitor)实现访问者接口的所有visit方法每个访问者封装一种完整算法元素接口(Element)定义accept方法,接收访问者通常为accept(Visitor& visitor)具体元素(Concrete Element)实现accept方法,调用访问者的对应visit方法通常为visitor.visit(*this)
2025-07-08 08:45:00
1195
1
原创 设计模式 | 模板模式
抽象类(Abstract Class)定义模板方法(算法骨架)声明抽象步骤(primitive operations)可提供默认实现或钩子方法具体类(Concrete Class)实现抽象类定义的抽象步骤可覆盖钩子方法改变默认行为算法骨架固定:保证流程一致性步骤实现灵活:允许子类定制细节反向控制结构:遵循好莱坞原则钩子方法扩展:提供精细控制点适用场景需要固定算法流程多个子类共享相同流程但实现不同需要控制子类扩展点框架设计基础"模板模式不是简单的代码复用,而是将算法框架提升为系统架构。
2025-07-08 08:15:00
852
原创 设计模式 | 策略模式
上下文(Context)维护策略对象的引用提供设置策略的接口将请求委托给当前策略对象策略接口(Strategy)定义算法族的公共接口声明算法执行方法具体策略(Concrete Strategy)实现策略接口封装具体算法实现算法封装:每个算法独立成类动态切换:运行时改变算法行为解耦设计:分离算法与使用上下文扩展自由:轻松添加新算法适用场景需要多种算法变体算法需要自由切换需要消除条件语句算法需要复用和扩展"策略模式不是简单的算法替换,而是将算法提升为一等公民。它是灵活性的架构基石。
2025-07-07 08:45:00
2410
原创 设计模式 | 空对象模式
抽象对象(Abstract Object)定义客户端期望的接口声明业务操作方法真实对象(Real Object)实现抽象对象接口提供实际业务逻辑空对象(Null Object)实现抽象对象接口提供安全的"无操作"实现可包含无害的默认行为客户端(Client)通过抽象接口使用对象无需检查对象是否为null安全默认:提供无害的缺省行为消除检查:减少空指针验证代码行为一致:保持接口契约完整性显式表达:明确表示"无行为"意图适用场景需要替代null引用的地方可选依赖项的缺省实现需要减少条件检查的代码。
2025-07-07 08:30:00
914
原创 设计模式 | 状态模式
上下文(Context)定义客户端接口维护当前状态对象将请求委托给状态对象处理状态接口(State)定义状态行为接口封装与上下文相关的状态行为具体状态(Concrete State)实现状态接口处理特定状态的行为管理状态转换逻辑状态封装:每个状态成为独立类行为委托:上下文将行为委托给当前状态显式转换:清晰的状态转换逻辑解耦设计:分离状态与行为适用场景对象行为随状态改变存在大量条件状态判断状态转换逻辑复杂需要清晰的状态生命周期管理"状态模式不是简单的状态切换,而是将状态提升为一等公民。
2025-07-05 08:45:00
1107
原创 设计模式 | 观察者模式
主题接口(Subject)提供注册、删除和通知观察者的接口维护观察者列表具体主题(Concrete Subject)实现主题接口存储状态数据状态变化时通知观察者观察者接口(Observer)定义更新接口接收主题通知具体观察者(Concrete Observer)实现观察者接口维护对主题的引用同步自身状态与主题状态解耦设计:分离事件生产者和消费者动态订阅:运行时添加/移除观察者事件广播:高效通知多个订阅者响应式编程:支持事件驱动架构适用场景需要实现事件通知机制需要解耦事件源和事件处理器。
2025-07-05 08:30:00
959
原创 设计模式 | 中介者模式
中介者接口(Mediator)定义同事对象间通信的接口通常包含notify或send方法具体中介者(Concrete Mediator)实现中介者接口协调各同事对象的行为了解并维护同事对象同事类(Colleague)定义同事对象的基类持有中介者的引用通过中介者与其他同事通信具体同事类(Concrete Colleague)实现同事类的业务逻辑状态改变时通知中介者交互中心化:将网状交互转为星型结构职责分离:各对象专注自身功能简化协议:统一交互接口灵活扩展:轻松添加新同事对象适用场景。
2025-07-04 08:30:00
807
原创 设计模式 | 备忘录模式
原发器(Originator)需要保存状态的对象创建备忘录保存当前状态使用备忘录恢复先前状态备忘录(Memento)存储原发器内部状态防止除原发器外的对象访问负责人(Caretaker)保存和管理备忘录不操作或检查备忘录内容状态封装:保护对象内部状态不被外部访问历史管理:支持任意时刻状态恢复解耦设计:分离状态保存和业务逻辑灵活扩展:支持多种状态存储策略适用场景需要实现撤销/重做功能需要保存对象历史状态需要实现事务回滚机制需要实现快照和恢复功能。
2025-07-04 08:30:00
484
原创 设计模式 | 迭代器模式
迭代器接口(Iterator)定义访问和遍历元素的接口包含next()current()isDone()等方法具体迭代器(Concrete Iterator)实现迭代器接口跟踪当前遍历位置聚合接口(Aggregate)定义创建迭代器的接口通常包含方法具体聚合对象(Concrete Aggregate)实现聚合接口返回具体迭代器实例抽象遍历:分离集合结构与遍历算法统一接口:提供一致的遍历方式多种实现:支持不同遍历策略解耦设计:客户端不依赖具体集合适用场景需要统一遍历不同集合需要支持多种遍历方式。
2025-07-03 08:45:00
837
原创 设计模式 | 解释器模式
抽象表达式(Expression)声明解释操作的接口包含interpret方法终结符表达式(Terminal Expression)实现与文法中终结符相关的解释操作代表语言的最小解析单元非终结符表达式(Nonterminal Expression)每条文法规则对应一个类包含其他表达式的引用(组合模式)上下文(Context)包含解释器需要的全局信息存储变量值等中间状态客户端(Client)构建抽象语法树(AST)调用解释操作解释器模式是处理领域特定语言的终极武器,它通过:文法对象化。
2025-07-03 08:30:00
1136
原创 设计模式 | 命令模式
命令接口(Command)声明执行操作的接口具体命令(Concrete Command)实现命令接口绑定接收者和动作接收者(Receiver)知道如何执行具体操作调用者(Invoker)请求命令执行操作客户端(Client)创建具体命令并设置接收者请求封装:将操作封装为对象解耦系统:分离调用者和接收者支持撤销:实现操作回滚支持事务:封装操作序列灵活扩展:轻松添加新命令使用时机需要将操作参数化需要支持撤销/重做功能需要实现事务操作需要构建命令队列需要记录操作历史。
2025-07-02 08:45:00
943
原创 设计模式 | 责任链模式
处理者接口(Handler)定义处理请求的接口可选:设置下一个处理者的方法具体处理者(Concrete Handler)实现处理请求的具体逻辑可以访问下一个处理者客户端(Client)创建处理链向链头发起请求解耦请求:发送者不依赖具体处理者灵活配置:动态调整处理链职责分离:每个处理者单一职责扩展性强:轻松添加新处理者流程控制:支持中断或继续传递使用时机有多个对象可以处理请求,且处理者在运行时确定需要动态指定请求处理流程希望解耦请求发送者和接收者需要灵活添加或修改处理逻辑。
2025-07-02 08:30:00
839
原创 设计模式 | 享元模式
享元(Flyweight)定义对象接口接受并作用于外部状态具体享元(Concrete Flyweight)实现享元接口存储内部状态(可共享)非共享具体享元(Unshared Concrete Flyweight)不需要共享的实现享元工厂(Flyweight Factory)创建和管理享元对象确保享元被正确共享客户端(Client)维护外部状态计算或存储享元的外部状态状态分离:区分内部(共享)和外部(非共享)状态对象共享:复用相似对象减少内存占用资源优化:避免重复加载昂贵资源性能提升。
2025-07-01 08:30:00
880
原创 设计模式 | 代理模式
主题接口(Subject)定义代理和真实对象的公共接口真实主题(Real Subject)实际执行业务逻辑的对象代理(Proxy)控制对真实主题的访问实现主题接口客户端(Client)通过代理与真实主题交互访问控制:保护敏感资源资源优化:延迟加载昂贵对象功能增强:添加日志、缓存等横切关注点解耦系统:隔离客户端与真实对象简化接口:隐藏复杂实现细节使用时机需要控制对真实对象的访问需要延迟创建昂贵对象需要添加额外的访问逻辑需要为远程对象提供本地代表需要智能引用管理。
2025-07-01 08:30:00
891
原创 设计模式 | 装饰器模式
组件(Component)定义对象的核心功能接口具体组件(Concrete Component)实现组件的核心功能装饰器(Decorator)持有组件引用实现组件接口具体装饰器(Concrete Decorator)添加额外功能动态扩展:运行时添加或移除功能灵活组合:任意组合功能装饰器单一职责:每个装饰器只关注一个功能开闭原则:扩展功能不修改现有代码避免继承爆炸:替代多层次继承结构使用时机需要在不影响其他对象的情况下动态添加职责不适合使用子类扩展的情况需要灵活组合多种功能需要透明地添加或移除功能。
2025-06-30 08:30:00
2152
原创 设计模式 | 外观模式
外观(Facade)提供简化的统一接口将客户端请求委派给子系统子系统(Subsystem)实现具体功能的类集合不知道外观的存在客户端(Client)通过外观与系统交互简化接口:提供清晰统一的高级接口解耦系统:隔离客户端与子系统复杂性封装变化:子系统演化不影响客户端提高可维护性:集中化系统访问点改善可读性:使用业务导向的接口名称使用时机需要为复杂子系统提供简单接口客户端与多个子系统紧密耦合需要分层子系统结构希望封装子系统初始化顺序需要统一的系统访问点。
2025-06-30 08:30:00
590
原创 设计模式 | 组合模式
统一接口:一致处理简单元素和复杂结构递归简化:复杂递归操作封装在组件内部灵活扩展:轻松添加新元素类型结构清晰:自然表示部分-整体层次关系代码复用:共享树结构操作逻辑使用时机需要表示对象的整体-部分层次结构希望客户端忽略组合与单个对象的不同需要统一处理简单元素和复杂结构系统需要灵活地添加新组件类型"组合模式不是简单地存储对象,而是在树形结构中统一管理简单与复杂的艺术。它是面向对象设计中处理层次结构的精妙解决方案。" - 设计模式实践者。
2025-06-29 19:02:19
1056
原创 设计模式 | 过滤器模式
被过滤对象(Object)需要被筛选的数据对象过滤器接口(Filter)定义过滤操作的通用接口具体过滤器(Concrete Filter)实现特定过滤标准组合过滤器(Composite Filter)组合多个过滤器实现逻辑运算逻辑解耦:分离筛选标准与业务逻辑灵活组合:支持AND/OR/NOT等逻辑运算易于扩展:新增筛选器不影响现有代码提高复用:筛选器可多场景复用清晰表达:复杂筛选条件直观表达使用时机需要根据多种标准过滤对象集合筛选条件需要灵活组合筛选逻辑可能频繁变化需要避免硬编码筛选条件。
2025-06-29 18:56:26
1028
原创 设计模式 | 桥接模式
抽象(Abstraction)定义高层控制逻辑维护对实现对象的引用扩展抽象(Refined Abstraction)扩展抽象定义的接口实现接口(Implementor)定义实现类的接口具体实现(Concrete Implementor)实现实现接口的具体类// 实现接口应足够通用public:// 避免特定控件的专用方法解耦架构:抽象与实现独立变化扩展性强:新增维度无需修改现有代码复用性高:实现部分可被多个抽象使用灵活组合:运行时动态绑定实现简化设计:避免复杂的继承层次使用时机。
2025-06-27 14:31:32
1160
原创 设计模式 | 适配器模式
目标接口(Target)客户端期望的接口被适配者(Adaptee)需要适配的现有组件适配器(Adapter)转换接口的中间件实现目标接口包装被适配者无缝集成:连接不兼容的接口代码复用:利用现有实现解耦系统:减少组件间依赖增量演进:支持系统逐步迁移标准化接口:统一多样化实现使用时机需要使用现有类但其接口不符合需求需要创建可复用的类与不相关类协同工作需要集成多个第三方库提供统一接口旧系统迁移过程中需要与新系统共存"适配器模式不是修改齿轮的齿形,而是在齿轮间添加传动装置。
2025-06-27 14:15:31
1012
原创 设计模式 | 原型模式
通过克隆机制实现对象高效创建,是性能敏感场景的利器。本文结合C++示例详解实现原理、深拷贝陷阱、应用场景,并与工厂模式对比分析。
2025-06-26 15:10:15
889
原创 设计模式 | 建造者模式
产品(Product)最终要构建的复杂对象抽象建造者(Builder)定义创建产品各部分的接口具体建造者(Concrete Builder)实现抽象建造者接口提供产品的具体实现保存产品的当前状态导演(Director)使用建造者接口构建产品控制构建过程顺序分离构造与表示:相同的构建过程创建不同表示精细控制:精确控制对象构建步骤简化接口:避免复杂的构造函数参数列表构建算法复用:导演类封装复杂构建逻辑参数验证:在build()方法中确保对象完整性使用时机当对象需要多个步骤创建时当对象有多个变体时。
2025-06-26 10:36:48
821
原创 设计模式 | 抽象工厂模式
抽象工厂(Abstract Factory)声明创建产品对象的方法集合每个方法对应一个产品类型具体工厂(Concrete Factory)实现抽象工厂的接口创建特定产品族的具体产品抽象产品(Abstract Product)为产品类型声明接口具体产品(Concrete Product)实现抽象产品接口属于特定产品族抽象工厂模式是设计模式中处理产品家族创建的终极解决方案,它通过:封装相互依赖对象的创建过程保证产品之间的兼容性提供灵活的配置机制实现客户端与具体实现的解耦使用场景。
2025-06-25 16:49:49
1127
原创 设计模式 | 工厂模式
解耦:客户端代码与具体类实现分离扩展性:轻松添加新产品而不影响现有代码可维护性:集中管理创建逻辑灵活性:支持运行时决策和配置在实际开发中,应当根据具体需求选择合适的工厂模式变体:对于简单场景,简单工厂足够高效对于需要高度扩展的系统,工厂方法是最佳选择避免过早优化,但为未来扩展留有余地"设计模式不是银弹,而是工具箱中的工具。工厂模式是其中最常用且强大的工具之一。" - 设计模式实践者。
2025-06-25 16:35:52
679
原创 设计模式 | 单例模式
单例模式是解决全局唯一对象访问的有效方案,在C++中实现时需要考虑线程安全、资源管理和生命周期等问题。现代C++(C++11及以上)通过静态局部变量提供了简洁安全的实现方式。在实际项目中,应权衡单例模式的优缺点,避免滥用导致代码难以测试和维护。"单例模式是全局变量的'文明版',它保留了全局访问的优点,同时避免了全局变量的缺点。
2025-06-23 15:02:47
888
原创 设计模式简介
在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)的书,该书首次提到了软件开发中设计模式的概念。四位作者合称GOF(四人帮,全拼 Gang of Four)。他们所提出的设计模式主要是基于以下的面向对象设计原则。
2025-06-23 14:27:54
1256
原创 std::shared_ptr 的线程安全性
控制块(control block)中的计数器使用原子类型。增减操作通过 CPU 级原子指令实现(如 x86 的。需要额外同步机制(如互斥锁)保护对象内部状态。保证即使多线程同时拷贝/析构,引用计数也准确。(保证删除对象前的所有操作可见)保证引用计数的增减是原子操作。,这是通过原子操作实现的。(只需原子性,无顺序约束)
2025-06-21 21:45:30
600
【Python自动化标注】基于LabelStudio的图像标注集成:实现高效图像数据处理与标注任务自动化
2025-06-23
qt 禁用系统热键但不影响键盘事件的响应
2022-06-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅