在实际项目中,我们常常需要高效、线程安全地加载配置文件。为了确保在高并发场景下配置只加载一次、且读取速度尽可能快,我们往往会设计一些特殊的加载方案。今天,我将记录一次从具体实现问题出发,逐步抽象出高级设计概念的过程。 1. 高效加载配置的需求 在项目初期,我们的需求很简单:如何在多线程环境下高效加载 ...
访问者模式(Visitor Pattern) 访问者模式(Visitor Pattern)是一种行为设计模式,它允许你将操作(方法)封装到另一个类中,使得你可以在不修改现有类的情况下,向其添加新的操作。 核心思想是将数据结构和对数据的操作分离,通过访问者对象来对数据进行操作,而不是将操作方法直接嵌入 ...
UML提供«include»机制避免用例重复,实现共享。本文介绍创建被包含用例的步骤,并通过实例展示其在基础用例共享、复杂用例分解及继承用例复用等场景下的应用。 ...
访问者模式主要用于分离算法和对象结构,从而在不修改原有对象的情况下扩展新的操作。它适用于数据结构相对稳定,而操作(行为)容易变化的场景。 ...
依赖注入(DI)与控制反转(IoC)可能是一些开发小伙伴耳熟但又不能详的两个词,经常看到它们的名字,但又不理解。这两个词来源于英文直译,看似高深莫测,其实非常简单,并且在一些开发场景中扮演着不可或缺的角色,比如单元测试离不开依赖注入,IoC容器是插件框架的最佳拍档等,本文尝试以最简单的方式阐述这两种... ...
之前写过两篇关于软件工程中对象命名的文章:开发中对象命名的一点思考与对象命名怎么上手?从现实世界,但感觉还是没有说透, 在软件工程中,如果问我什么最重要,我的答案是对象命名。良好的命名能够反映系统的本质,使代码更具可读性和可维护性。本文通过具体例子,探讨为何应该以对象本质而非功能来命名,以及不当命名 ...
简介 责任链模式(Chain of Responsibility Pattern)允许开发者将请求沿着链进行发送,直到其中一个处理者对象对其进行处理。 责任链模式的角色说明: 处理者(Handler):声明所有具体处理类的通用接口。该接口通常仅包含一个方法,用于处理请求,但有时还会包含一个用于设置下 ...
UML用例可以泛化,泛化可简化模型、避免重复、易于扩展。通过抽象用例实现复用和模块化。讨论参与者及用例之间的泛化关系,指出不使用泛化可能导致模型复杂和重复工作的问题。 ...
Ron Lach 摄影 我还记得当年参与一个复杂分布式系统的大规模重构时的情景。 当时,我们团队的最终目标是优化各个模块的组织、跟踪和部署方式,但很快发现,我们现有的组件管理方式存在诸多问题。 有些团队使用不一致的命名规范,有些仍依赖过时的脚本来处理部署,而没有人有一个统一的系统来跟踪生产环境中运行 ...
平常工作难遇到这类问题, 一般搭建新系统或搭建系统二时需要复用系统一一些前后端能力, 可能会遇到跨域拦截问题. 这里提供一种基于服务器解决方案. 更多其他方案, 详细细节可自行查阅更多资料, 写一些前后端交互最小现场. 首先理解 CORS 跨域拦截是什么回事? 其实一般浏览器请求服务器,会发两次请求 ...
1. 依赖倒置 依赖倒置原则(Dependency Inversion Principle, DIP)是 SOLID 原则中的一项,其核心思想是通过抽象解耦高层模块和低层模块,使二者都依赖于抽象而非具体实现。 依赖反转/倒置的体现:传统依赖方向是高层模块直接调用低层模块,在源码级别上高层模块依赖低层 ...
在 Qt QML 中结合 QuickFlux(状态管理框架)与 Qt FluentUI(现代 UI 组件库)可以实现高效的状态管理和美观的界面设计。以下是实现两者协作的完整方案和代码示例: 1. 环境配置 1.1 安装依赖 QuickFlux:通过 qpm(Qt Package Manager)安装 ...
模板方法模式定义了一个操作中的算法骨架,并将一些步骤延迟到子类中实现。模板方法模式基于继承机制。模板方法模式在类层次上运作,因此它是静态的。 ...
创建型模式 特点 创建型模式关注点是如何创建对象,其核心思想是要把对象的创建和使用相分离,这样使得两者能相对独立地变换。 创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。 简单/静态工厂SImple Factory 定义 在简单工 ...
概述 定义:封装一些作用于某种数据结构中的各元素的操作(将数据结构于元素进行分离),它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。 结构 访问者模式包含以下主要角色: 抽象访问者(Visitor)角色:定义了对每一个元素(Element)访问的行为,它的参数就是可以访问的元素,它的 ...
概述 定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 结构 迭代器模式主要包含以下角色: 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合元素以及创建迭代器对象的接口。 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代 ...
评价系统是什么? 从用户角度:商品买家交流平台 相对于商家的“精装修”,用户更喜欢看到别的买家发的“毛胚房”,而评价系统在用户的角度就是买家间的“真实体验共享社区”。 用户买到了好的东西,物超所值,开心分享一下;买到了不符合预期的东西,觉得有失落感,平台欺骗自我,发出来,倾斜自己的愤怒,也让其他用户 ...
目录 了解需求 方案 1:数据库轮询 方案 2:JDK 的延迟队列 方案 3:时间轮算法 方案 4:redis 缓存 方案 5:使用消息队列 了解需求 在开发中,往往会遇到一些关于延时任务的需求。最全面的Java面试网站 例如 生成订单 30 分钟未支付,则自动取消 生成订单 60 秒后,给用户发短 ...
概述 日常生活中,我们出去吃饭都会遇到下面的场景。 定义: 将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。 结构 命令模式包含以下主要角色: 抽象命令类(Command)角色: 定义命令的接口, ...
概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。 定义:该模式定义了一系列算 ...