- 博客(132)
- 收藏
- 关注
原创 行为模式---访问者模式
访问者模式通过将算法封装在访问者对象中,使得算法可以独立于对象结构变化。对象结构中的每个元素都接受访问者对象,并将自身传递给访问者对象,从而执行操作。2、如果在所作用的对象添加一些附加操作,而不能去修改所作用的对象结构的时候,可以使用访问者模式。3、当一些行为在类的层次结构中的一些类有意义,而对于其他类没有意义的时候,可以使用此模式。2、在被操作类中添加一个接口,用于接受访问者对象,并通过访问者对象去调用访问者的操作函数。3、在客户端使用的时候创建访问者,并将访问者通过参数传递给被操作的类中。
2025-03-17 23:29:45
268
原创 行为模式---模版模式
在这种模式下不用修改逻辑结构,使用继承机制中的子类来实现算法不同部分的处理逻辑。1、分析当前业务逻辑,梳理出算法中的重复逻辑和不同逻辑,并将其抽出到一个类(超类)中。2、代码复用:当多个类的算法除了一些细微的不同,其他处理逻辑一样的时候,为了去除重复代码就可以使用此模式将不同之处在子类中实现。1、固定流程,可变步骤:当只向客户端定义一个特定的算法步骤的时候,方便子类能对其进行扩展,同时保证算法结构不变,可使用此算法。在子类中实现需要单独处理的算法逻辑(实现在超类的虚函数上)。
2025-03-14 00:03:15
433
原创 行为模式---策略模式
6、在客户端使用的时候,先创建算法对象,之后创建上下文对象,在创建上下文对象的时候可以通过构造函数或者设置算法对象的函数将算法对象设置给上下文对象。4、当使用了一系列同一算法的不同变体的时候,需要复杂的条件判断来执行对应的算法的时候,可以使用策略模式。3、隔离算法和业务逻辑,如果算法的逻辑在上下文中不是很重要,那么就可以使用策略模式将算法封装,实现算法和业务逻辑的隔离。5、实现具体的上下类,继承上下接口。3、创建一个上下文接口,需要实现一个算法的引用对象,和一个是设置算法对象的函数,算法执行函数。
2025-03-12 22:21:19
552
原创 行为模式---状态模式
状态模式通过将对象的状态封装成独立的类,并将其行为委托给当前的状态对象,从而使得对象行为随着状态的改变而改变,使其看上去就像是类的一个属性一样。5、在客户端的使用的时候,首先创建一个初始转台对象,之后创建一个上下文对象,并将状态对象设置个上下文,之后通过调用上下文中的操作函数进行状态切换和状态的操作函数。1、如果对象需要根据不同的状态进行不同的操作的,且状态较多并且代码需要复用的时,需要使用到状态模式。3、创建实际的状态类对象,在实际的状态类对象实现具体的操作函数方法,在此方法中实现状态的切换。
2025-03-11 00:13:52
832
原创 行为模式---观察者模式
观察者模式通过将观察者和被观察者解耦,使得观察者可以动态地订阅或取消订阅被观察者的状态变化。它的核心思想是定义对象间的一对多的依赖关系,当有一个对象发生改变之后通知多个观察对象。3、创建实际的发送者类,实现通知函数(此函数需要通知所有的观察者),订阅者添加、移除函数等。1、当一个对象的状态发生给变之后,其他对象也需要跟着改变,或者说实际对象是未知状态或需要动态变化的时候需要使用到此模式。1、创建一个发送者(主题)的对象接口,实现和一个数据结构,数据结构用于保观察者的引用。并且实现通知更新的方法。
2025-03-10 22:30:43
491
原创 行为模式---备忘录模式
2、创建备忘录类接口,声明获取数据函数、声明获取状态的函数(逐一声明对应每个发起类成员变量的备忘录成员变量,获取数据函数和获取状态函数可以声明一个,只要能满足备忘录备份的需求即可)。4、实现发起类,在此类中需要实现一个快照函数和恢复状态的函数,此函数也是备忘录模式的主要操作,通过此函数可以完整的将所需要所有状态进行备份快照。并返回快照数据(备忘录对象)。备忘录模式是通过引入一个备忘录对象来存储另一个对象的内部状态,原始对象(发起人)可以在需要时将自己的状态保存到备忘中,并在以后从备忘录中恢复状态。
2025-03-10 00:15:14
362
原创 行为模式---责任链模式
责任链模式是一种行为设置模式,它的核心思想就是将请求的发送者和接收者进行解耦,每个接收者都可以处理请求。2、创建实际的接收者,实现继承接收者接口,在实际的处理函数中判断当前请求能否处理,如果如果无法处理,就想请求传递给下一个处理者。3、在客户端使用的时候首先需要创建所有的实际处理者对象,并将所有的处理者对象通过设置的方式将其全部连接起来。1、当程序中使用不同的方式处理各种不同的请求的时候,而请求的顺序是未知的,这个时候就可以使用责任链模式。2、当请求必须按照一定的顺序进行处理的时候,就可以使用责任链模式。
2025-03-08 23:50:03
340
原创 行为模式---中介者模式
5、在客户端创建需要中介者管理的基础构件,在创建一个具体的中介者对象并将需要中介者管理的基础构件以值传递的方式设置到中介者对象中。 1)实现设置函数将同事对象设置给中介者对象(这里可以在构造函数中进行初始化对象设置 ,也可以使用单独的设置函数进行设置)。4、实现具体的基础构件类,具体的基础构件类中需要实现发送消息通知的函数,并且需要将自己本身添加到中介对象。3、实现具体的中介者对象,在具体的中介者对象中添加一个管理同事对象的数据结构。2、创建同事对象的接口,在此对象中定义一个中介者引用对象。
2025-03-08 00:53:25
546
原创 行为模式---迭代器模式
5、创建具体的容器类,除了需要实现容器类的接口之外,还需要实现容器中的具体存储方式,例如是通过数据还是链表进行数据存储。3、声明聚合对象接口的时候,需要实现一个接口用于创建对应的迭代器的方法,其返回值必须是对应的迭代器对象。6、到处迭代器模式基本完成,在客户端使用的时候需要先创建容器,向容器中写入数据,之后在创建迭代器,创建迭代器之后就可以通过迭代器操作容器了。4、创建具体的迭代器类,在创建迭代器类的时候除了实现迭代器接口中的方法之外,还需要在构造函数进行迭代器和容器的关联。
2025-03-06 22:46:19
586
原创 行为模式---命令模式
命令模式是一种行为设计模式,它的核心思想就是将请求封装为一个对象,此对象包含与请求相关的所有信息。通过继承命令接口创建一系列不同的具体命令类,具体命令类中实现方法。每个具体的命令类必须保存请求参数和实际接受者对象的引用。3、创建命令的调用类,也是发送命令的类,在这些类中添加保存命令的成员变量,发生者只能通过命令接口与其命令进行交互,发送者本身不创建对象,命名对象是通过参数设置到调用类的。1、使用命令模式需要至少创建三个类,一个命令的接口类,一个是命令的调用类,一个实际接受者对象(简单命令可以没有);
2025-03-04 23:34:03
270
原创 结构型模式---享元模式
享元模式是一种结构型设计模式,他摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。5、当创建完整的数据类的时候可以去容器或者工厂中寻找有没有需要的享元对象,有的话直接拿出来用,没有的话创建新的。4、创建一个享元工厂类,创建需要的享元对象,如果没有就创建一个新的享元对象并添加到容器或者工厂中。外在状态:每个对象各自不同的情景的数据成员变量。外在状态:每个对象各自不同的情景的数据成员变量。内在状态:就是不变的在各个对象中重复使用的成员变量。
2025-02-28 00:46:07
723
原创 结构型模式---外观模式
外观模式是一种结构型设计模式,它的核心思想是为复杂的子系统提供一个统一的接口,简化客户端与子系统的交互。外观模式通过引入一个高层接口,隐藏子系统的复杂性,使客户端更容易使用。用于子系统的保密,对于一些子系统不方便给客户端展示代码,可以提供一系列接口来隐藏子系统的实现逻辑。用于子系统比较复杂,不想客户端花太多精力去研究子系统的使用。用于客户端无需具体操作子系统组成,只需要使用的场景。1、了解需求,定义需要使用的接口类(外观类)
2025-02-26 23:25:15
290
原创 结构型模式---装饰模式
装饰模式是一种结构形模式,允许通过将对象放入包含行为的特殊封装对象(装饰器)中来为原来对象(组件)绑定新的行为。1、如果希望在无需修改代码的情况下即可使用对象,且希望在运行时为对象新增额外的行为,可使用装饰模式。6、将装饰基类扩展为具体装饰,具体的装饰必须在调用父类方法之后或者之前执行具体的自身行为。1、确保业务逻辑可用一个基本组件(组件对象)及多个额为可选层次(装饰器对象)表示。2、找出基本组件和可选层次的通用方法,创建一个组件接口并在其中声明这些方法。3、创建一个具体组件类,并定义其基础行为。
2025-02-26 00:19:19
181
原创 结构型模式--组合模式
组合人模式是结构型设计模式的一种,主要是用于解决代码中出现类像树一样进行组合而出现的组合结构的相关操作问题。4、创建一个容器类表示复杂元素,在该类中,创建一个数组成员变量来存储对于子元素的引用,该数组必须能够同时保持叶节点和容器,因此请确保将其声明为组合接口类型。尝试将其分解为简单的元素和容器,容器必须能够同时包含简单元素和其他容器。2、客户端的代码需要以相同的方式处理复杂或者简单的元素(组合对象或者单个对象),可以使用组合模式。2、声明组件接口及其一系列的方法,这些方法对简单和复杂元素都有意义。
2025-02-25 00:14:38
247
原创 结构型模式---代理模式
1、延缓初始化,当我们偶尔需要使用一个重量级的服务对象,如果一直保持该对象的运行会消耗大量的系统资源,这时候就可以使用代理。1、如果有现成的服务器接口我们可以直接继承服务器接口实现代理类,如果没有现成的服务接口,我们就需要创建一个接口来实现服务对象和代理的可交换性。代理模式是一种结构型模式,主要用于在客户端和接口之间添加一个中间层,用于在客户端和接口之间进行权限控制或者其他的中间层操作。2、权限访问控制,当我们希望特定的客户端使用接口的时候,就可以使用代理模式。当复合我们的条件的时候再进行真正的接口访问。
2025-02-14 00:01:27
574
原创 结构形模式---桥接模式
1、明确类中独立的维度,独立的感念可能是:抽象/实现,域/基础设施,前端/后端。之后根据分离出来的部分创建抽象部分和实现部分的接口。桥接模式是一种结构化模式,是将一个大类或者一系列的紧密相关的类拆分为抽象和现实两个独立部分的层次结构,通过引用独立层次对象的组合实现类。**具体实现部分:**对实现部分进行了扩展,实现不同的支持,一般实现部分和具体实现部分为父子关系。:对抽象部分进行扩展,实现不同的控制逻辑,一般抽象部分和具体抽象部分为父子关系。2、实现抽象部分和实现部分的具体实现。
2025-02-13 00:00:19
332
原创 结构形模式---适配器模式
2、当继承于一个类,这个类的不同子类有不同的方法,这些方法不是这继承体系中所具有的共性问题。2、创建一个继承于接口类的适配器类,这个适配器类接口要和接口类保持一致,在适配器中定义一个三方接口的引用。适配器模式的实现由两种方式,一种是适配器对象,一种是适配器类。1、当使用的类与其他接口代码不兼容的时候,可以使用适配器模式。1、创建两个类,一个是接口类,一个三方类(正常是三方特定类);适配器是对象是将第三方接口通过对象调用引入到适配器中。适配器类是通过多继承将第三方接口继承到适配器类中。
2025-02-11 23:04:13
359
原创 创建型模式-原型模式
clone函数:clone函数是一个成员函数,可以进行虚函数实现,这就给clone函数有了多态的能力,是他可以通过基类指针复制子类对象。1、当需要复制一些对象,同时又希望代码能独立于对象所属的具体类,可以使用原型模式。2、如果子类的区别仅在于其对象的初始化方式,那么可以使用该模式来减少子类的数量。1、在需要复制的类中,增加clone的方法。拷贝构造函数:他是类自己的一个方法,不能进行虚函数实现,因此只能创建本类对象。原型模式是一种创建型模式,用于对已有的类进行克隆复制的操作。
2025-01-08 23:25:27
459
原创 创建型模式-生成器模式
生成器模式是创建型模式的一种,生成器模式主要是解决在大类创建对象初始化的复杂的问题。将一个复杂类的创建拆分成几个部分,再根据具体需求创建初始对象,而不必每次都创建所有的部分。在需要创建包含有不同内容的对象的时候,可以通过生成器类,生成器类可以创建多个,就可以生成对于的对象。1、当要使用的类在生成的时候有哦多个不同的可选参数或者模块,为了避免构造函数过大可以使用生成器模式。2、当要是的组成部分可能有不同的属性的时候可以使用生成器模式。1、明确定义步骤,确保包含了所有的生成形式。
2025-01-08 23:22:38
251
原创 创建型模式-抽象工厂模式
抽象工厂模式是一种创建型模式,和工厂模式一样也是为了软件的可扩展性的一种设计模式。通过名字也可以知道抽象工厂模式和工厂模式有一定的关系。小编这里理解抽象工厂模式就是工厂模式的扩展。抽象工厂是将一系列相关的产品进行创建的一种模式。而工厂模式单一产品的创建。这里有个理解误区就是抽象,这里的抽象指的是产品的抽象,和代码的抽象没有任何关系。2、声明抽象工厂接口,并且在接口中为所有的抽象产品提供一组构建方法。1、为所有的产品声明抽象接口,然后让所有的具体产品类实现。3、为每种产品变体实现一个具体的工厂类。
2025-01-08 22:41:31
521
原创 创建型模式-工厂模式
工厂模式是一种创建型的设计模式,原理是父类提供一个创建对象的方法,允许子类去实现具体的实例化对象。通过此模式可减少创建和具体的产品之间的耦合关系。1、当需求中无法预估对象确切类别及个别的依赖关系。例如: 如果需要向应用中添加一种新产品, 你只需要开发新的创建者子类, 然后重写其工厂方法即可。2、当需要用户可以扩展我们软件库或者框架内部的应用。2、实现继承于工厂类的工厂类和继承于产品的产品类。1、创建一个工厂基类和产品基类。3、对用工厂实现具体的产品。
2025-01-08 22:17:44
478
原创 创建型模式-单例模式
通过以上三步单例模式基本上就实现了,但是在第三步中如果单纯使用new来创建类对象,这里需要注意线程安全,这里最安全的做法就是使用一个静态成员函数,返回静态成员函数的地址,这样能保证线程安全。那么以上两种方式那种好,这里当然是第一种好,具体可以看C++对static的解释。单例模式是一种创建型的设计模式,主要用于在当前项目中需要实例化一个对象的情况。3、在这个类中定义一个静态成员函数,在这个函数new一个类对象并返回。1、如果程序中对于某一个类型对于整个项目只有一个可用实例。1、创建一个需要实例化的类。
2025-01-07 00:22:22
403
原创 设计模式介绍
设计模式是一种解决编程中特别场景的一种思路。设计模式根据其创建的意图和解决的问题分为三类:创建型模式、结构型模式和行为模式。以上三种设计模式实现的底层原理是依托于编程语言的特性,通过类的嵌套组合(后续叫组合)和类的继承(后续叫继承)实现各种的设计模式。 创建型模式:此类中的设计模式主要是解决对象创建相关的一些解决思路,根据编程语言的特性,从而实现对象的自动创建从而增加代码的复用性和灵活新。
2025-01-07 00:11:59
913
原创 06 C++Lambda表达式
闭包类型:在 C++ 中,"闭包类型"(或称为闭合类型)通常与闭包相关联。闭包类型通常用于实现 lambda 表达式或其他函数对象,这些函数对象能够记住并操作其定义环境中的变量。当且仅当捕获为空的时候,闭包类型是结构化类型。如果模板约束以属性说明符序列结尾,那么该序列中的属性会被视为前属性中的属性(C++23。:在实际使用过程中我们很少使用自定义的闭包类型,一般都是和。使用于闭包类型的operator()的类型的。闭包类型的operator()的形参列表,闭包类型::operator()(形参)
2024-09-09 15:36:02
437
原创 05 C++语言---左值右值
3、右值可以用来初始化 const 左值引用,这种情况下该右值所标识的对象的生存期被延长到 该引用的作用域结尾。参时,右值将被绑定到右值引用的重载之上(从而,当复制与移动构造函数均可用时,以右值实参将调用它的移动构造函数,复制和移动赋值运算符与此类似)。4、右值可以用来初始化右值引用,这种情况下该右值所标识的对象的生存期被延长到该引用 的作用域结尾。2、泛左值可以是多态的:它标识的对象的动态类型不必是该表达式的静态类型。1、纯右值不具有多态:他标识的对象的动态类型始终是。
2024-09-05 11:13:04
347
原创 04 C++语言---数据类型
C++中数据分为两种,一种是可以被修改的数据,这种数据一般被成为,还有一种数据是。**变量:**变量在程序中的使用场景有很多,一般常用的数据类型都属于常量。例如 int a;等。**常量:**常量是在程序执行期间不会变的。常量是固定值,在程序执行期间不会改变。一般常量的声明一般要使用到关键字(#define和const)。C++中数据也是有很多类型限制的,这些类型限制我们就叫做数据类型。数据类型分为基础数据类型和复合数据类型。
2024-08-21 15:51:49
672
原创 C++小技巧---单例模式创建唯一对象
将构造函数修改为私有,创建一个私有的CProxyMgr指针对象,通过静态成员函数new出一个CProxyMgr对象完成单例模式的实现;那么以上两种方式那种好,这里当然是第二种好,具体可以看C++对static的解释。创建一个CProxyMgr的静态指针变量,通过引用返回。以上实现便是一个单例唯一对象的创建方式。
2024-04-20 11:18:48
301
原创 VS 中调用调试DLL库的方法
4、在配置框中选择附加到为本机代码,在可选进程中选择使用dll库程序的exe,配置完成之后点击底下附加即可完成配置。1、当前代码是最新的,并且编译成dll的库有程序使用。1、使用VS打开要调试的dll库项目。3、点击附加到进程,弹出配置框。2、点击调试菜单展开调试菜单。2、打开运行dll库的程序。
2024-01-15 11:19:21
3712
原创 VS中动态库的创建和调用
库是写好的现有的,成熟的,可以复用的代码。库的存在形式本质上来说库是一种可执行代码的二进制。 库有两种:静态库(.a、.lib)和动态库(.so、.dll)。所谓静态、动态是指链接阶段,静态库的链接阶段是在项目编译的时候静态链接。动态库是在程序运行的时候由代码加载链接。 静态库和动态库的区别主要是在链接阶段处理库的方式不同而区分的。
2024-01-11 11:31:16
2718
原创 Linux中搭建coturn服务器
问题1:ERROR: OpenSSL Crypto development libraries are not installed properly in required location.参考链接:https://blog.csdn.net/lepaitianshi/article/details/123778506。解决办法:sudo apt-get install libssl-dev 执行此命令安装libssl。3、执行make install 安装。2、进入到coturn路径下,执行一下命令。
2023-11-01 14:58:35
1609
原创 Qt中串口模块的使用
在Qt的拓展模块中,Qt提供了许多的结果通讯模块,有串口、can、 ModBus等。下面就简单介绍一些Qt中的串口模块。Qt串口提供基本功能,包括配置、I/O操作、获取和设置RS-232引脚的控制信号。Qt串口模块不支持以下功能:终端功能,如回声、控制CR/LF等。文本模式。配置读取或写入时的超时和延迟。引脚输出信号更改通知。特殊收发器条件,如帧错误、奇偶校验错误和中断条件错误。
2023-11-01 12:51:37
1530
原创 Linux下搭建SRS服务器环境
推送流成功之后,使⽤srs⾃带的rtc_player播放器进⾏播放,直接请求srs服务的8080端⼝即可。以上命令中的ip地址是服务器所在的window系统的ip地址。以上命令中的ip地址是服务器所在的window系统的ip地址。1、指定配置文件,即可启动srs。1、使用ffmpeg命令推流。1、使用ffmpeg命令推流。2、使用WebRTC拉流。
2023-10-31 15:34:04
1338
原创 Window下SRS服务器的搭建
Docker 实质上是在已经运行的 Linux 下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的 Linux 主机。6、执行 ./objs/srs -c conf/srs.conf命令启动srs服务。推送流成功之后,使⽤srs⾃带的rtc_player播放器进⾏播放,直接请求srs服务的8080端⼝即可。执行完成之后,执行ls命令,出现srs的文件结构就说明映射成功了。以上命令中的ip地址是服务器所在的window系统的ip地址。以上命令中的ip地址是服务器所在的window系统的ip地址。
2023-10-31 15:30:07
4525
原创 WebRTC介绍
(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和(或)音频流或者其他任意数据的传输。WebRTC 包含的这些标准使用户在无需安装任何插件或者第三方的软件的情况下,创建点对点(Peer-to-Peer)的数据分享和电话会议成为可能。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。
2023-10-30 16:52:11
181
原创 Window下coturn服务器的搭建
出现此问题是由于Cygwin中没有安装openssl,如果在编译之前添加了openssl应该不会出现此问题,如果添加了还出现此问题,建议再添加openssllib。2、下载coturn源码,地址:https://codeload.github.com/coturn/coturn/zip/4.5.0.4。1、安装Cygwin,地址:https://cygwin.com/install.html。出现此问题是由于在Cygwin中没有安装libevent,添加之后应该就会出现此问题。
2023-10-30 14:54:52
2385
原创 环境---IDE的组成
集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。集成了代码编写功能、分析功能、编译功能、调试功能等一体化的开发软件服务套。:(这部分是小编自己理解的不知道对错),在VSIDE中除了以上一些东西,我们在配置VS环境的时候有时候需要下载SDK或者Kit,SDK和kit小编理解是不是在这一部分中。:用于将项目中编写的代码编译为机器可识别的二进制代码。
2023-10-27 13:19:08
1398
原创 Qt中绘图框架的使用例子
当在视图中创建场景时,场景的坐标范围为场景矩形框的顶点加上长宽,例如在视图中添加一个场景矩形框为(-100,100,200,200)那么场景区域的左上角坐标为(-100,100),宽度为200,高度为200,也就是说视图的坐标范围为(-100,100)和(100,300),而对应的坐标原点(0,0)不在此范围之内。不设置setpos()坐标,这个时候会默认和场景中的坐标对应,也就是说这种情况下图形项的坐标和场景中的坐标是一一对应的。但是一般情况下载创建图形项的时候会将(0,0)点设置为图形项的中心点。
2023-10-18 10:24:20
360
qt使用qtpdfium和QAxObject实现doc文件的输出、pdf的输出和读取qpdf消息
2023-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人