
设计模式
文章平均质量分 80
设计模式
王YANLONG
技术总结,自我沉淀
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
uml类关系(实现、继承,聚合、组合,依赖、关联)
drawio和EA是架构设计时经常使用的画图工具。drawio学习门槛低,使用灵活,但是功能仅仅限于画图。EA学习门槛高,但是功能更加的丰富:①在画图方面,EA严格满足UML标准,EA中的图和类是关联的,如果修改了一个类的名字或者函数等,在引用这个类的图中也会自动修改②EA还可以将架构设计时定义的类、接口等导出为代码③EA可以导入已有的代码,生成类图。原创 2025-04-26 17:40:21 · 1136 阅读 · 0 评论 -
设计模式:迭代器模式
但是对于一些复杂的数据结构,比如二叉树、map、set等,遍历操作就比较复杂,如果每次遍历这样的数据结构都要自己写遍历代码,这样的工作效率是比较低下的。这就给我们提供了一些写代码的思路,即使没有学习过设计模式,那么在写代码的时候,也可以想代码实现的是不是一个独立的、高内聚的功能,这样的代码是不是可以抽象出来,提高复用性。对于线性数据结构来说,迭代器模式,和直接使用下边的方式,复杂成都市差不多的,但是对于复杂的数据类型,比如map或者set,迭代器就有用了。比如编程语言标准库中的代码,修改的频率是比较低的。原创 2025-03-05 21:35:01 · 474 阅读 · 0 评论 -
设计模式:代理模式
代理模式是很常见的设计模式,即使没有专门学习过这种设计模式,在工作中也一定用过这种设计模式。在实际生活中,代理模式也是常见的,比如内阁首辅相对于皇帝,前者是后者的代理,内阁首辅收到奏折时,往往也要做一些预处理和后处理。当我们需要给原始类增加一些功能、日志、性能监控时,通过修改原始类当然是可以实现的,但是这样就侵入了原来的逻辑,违背了开闭原则。并且新增的功能与原有的功能本来就属于不同范畴的功能。在不修改原始类的基础上,增加新的功能,就需要用到代理模式。有些类也是无法修改的,这种情况下,只能使用代理模式。原创 2025-02-16 17:58:07 · 461 阅读 · 0 评论 -
设计模式:状态模式
状态机有3个要素:状态,事件,动作。假如一个对象有3个状态:S1、S2、S3。影响状态的事件有3个:E1、E2、E3。每个状态下收到对应事件的时候,对象的动作为AXY。那么该对象的状态机就可以用如下表格来表示。S1收到事件E1的时候动作为A11,收到事件E2的时候动作为A12,收到事件E3的时候动作为A13,以此类推。其中,动作可以是状态发生切换,也可以是其它与业务有关的动作。原创 2025-02-16 12:10:36 · 1174 阅读 · 0 评论 -
cyberrt:TimingWheel单例分析
单例模式要求一个类在一个进程中只能创建一个对象。比如 cyberrt 中的 TimingWheel 类就是单例模式,这个类管理着一个进程内的所有定时器,只需要一个对象就可以。单例模式的实现有两种方式,懒汉式和饿汉式。懒汉式,当第一次使用的时候才会真正创建这个对象;饿汉式,不管会不会用到这个对象,在进程启动的时候都会创建这个对象,如果一直不使用,那么就会造成资源浪费。饿汉式的缺点是可能造成资源浪费,但是对性能友好,因为在进程启动的时候就直接创建了,需要使用的时候可以直接拿来使用;懒汉式反之。原创 2024-02-24 15:46:57 · 867 阅读 · 0 评论 -
cyberrt:组件加载器
cyberrt 加载运行组件的时候,首先要加载用户的动态库。动态库的加载通过类 ClassLoader 来完成。(1)动态库加载函数 dlopen()底层动态库的加载是通过函数 dlopen() 完成。dlopen() 可以直接传动态库的名字,比如 libcamera.so,也可以传动态库的路径,比如 /ads/lib/libcamera.so。原创 2024-02-24 21:16:03 · 1379 阅读 · 0 评论 -
设计模式:模板模式
在上边的例子中,thread_entry() 就是一个模板方法,其中对 init(),should_stop(),do(),prepare_stop() 进行了调用。thread_entry() 的实现是不变的,是一个模板。init(),should_stop(),do(),prepare_stop() 需要派生类来实现,用户不需要关心这几个函数是怎么调用的。其中 init(),should_stop(),do(),prepare_stop() 均声明为纯虚函数,也就是需要子类来实现的函数。原创 2024-03-10 18:36:21 · 470 阅读 · 0 评论 -
查表 —— 策略模式和职责链模式的核心
查表法在工厂模式、策略模式以及职责链模式中都有使用。以工厂模式为例,表中存储的数据,key 是商品的类型,value 是生产这个商品的工厂。在生产商品的时候,直接根据商品类型从表中获得商品对应的工厂,然后通过工厂生产商品。如果没有表的话,那么类型判断和工厂实现都在一块,代码耦合度高,通过查表法可以对代码进行解耦。原创 2024-03-10 22:57:04 · 974 阅读 · 0 评论