自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

原创 C++设计模式---解释器模式

(2)当系统中存在大量的重复的规则或表达式,并且这些规则或表达式可以被解释为特定的语言时,解释器模式也是一个不错的选择。(1)当需要解释和执行特定语法规则或表达式时,可以考虑使用解释器模式。解释器模式可以用于解决特定问题中的解释和执行问题,通常用于处理复杂的语法或规则。(1)可以灵活地扩展语法规则,增加新的解释器类来支持新的语法规则。(2)可以将语法规则和解释器分离,使得系统更加易于维护和扩展。

2024-07-11 08:45:00 196

原创 C++设计模式---访问者模式

访问者模式允许一个或者多个操作应用到一组对象上,而这些操作可以在不改变这些对象所属类的前提下进行定义和实现。:声明一个或多个访问具体元素的方法,方法的参数通常是具体元素类型。:能枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素。:实现抽象元素接口,通常有多个具体元素类。:实现抽象访问者声明的各个访问方法。:定义一个接受访问者的接口。

2024-07-11 08:15:00 187

原创 C++设计模式---备忘录模式

备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后将对象恢复到原先保存的状态。(1)发起人(Originator):这是需要保存和恢复状态的对象。发起人通常包含需要保存的状态数据,以及创建备忘录和从备忘录中恢复状态的方法。(3)管理者(Caretaker):负责管理备忘录的对象。它可以保存多个备忘录对象,并提供对备忘录的访问,通常提供了保存和恢复状态的接口。(2)备忘录(Memento):用于存储发起人对象状态的对象。

2024-07-10 09:00:00 376

原创 C++设计模式---中介者模式

中介者模式(Mediator Pattern)也被称为调停者模式,是⼀种⾏为型设计模式,它通过⼀个中介对象来封装⼀组对象之间的交互,从⽽使这些对象不需要直接相互引⽤。: 实现抽象同事类接⼝,每个具体同事类只知道⾃⼰的⾏为,⽽不了解其他同事类的情况,因为它们都需要与中介者通信,通过中介者协调与其他同事对象的交互。: 实现抽象中介者接⼝,负责协调各个具体同事对象的交互关系,它需要知道所有具体同事类,并从具体同事接收消息,向具体同事对象发出命令。: 定义同事类的接⼝,维护⼀个对中介者对象的引⽤,⽤于通信。

2024-07-10 08:00:00 254

原创 C++设计模式---职责链模式

实现处理请求的⽅法,并判断能否处理请求,如果能够处理请求则进⾏处理,否则将请求传递给下⼀个处理者。:定义⼀个处理请求的接⼝,包含⼀个处理请求的抽象⽅法和⼀个指向下⼀个处理者的链接。:创建并组装处理者对象链,并将请求发送到链上的第⼀个处理者。

2024-07-05 09:00:00 144

原创 C++设计模式---状态模式

在C++中实现状态设计模式时,通常会定义一系列的状态类,每个类封装了与特定状态相关的行为,以及一个上下文(Context)类,该上下文类持有一个状态对象的引用,并根据这个状态对象的类型来执行相应的方法。: 负责处理Context在状态改变时的⾏为, 每⼀个具体状态⼦类实现⼀个与Context 的⼀个状态相关的⾏为。: 定义⼀个接口,⽤于封装与Context的⼀个特定状态相关的⾏为。: 维护⼀个具体状态⼦类的实例,这个实例定义当前的状态。

2024-07-05 08:30:00 247

原创 C++设计模式---迭代器模式

是⼀种使⽤频率⾮常⾼的设计模式,在各个语⾔中都有应用,其主要⽬的是提供⼀种统⼀的⽅式来访问⼀个聚合对象中的各个元素,而不需要暴露该对象的内部表示。:定义访问和遍历元素的接⼝, 通常会包括hasNext() ⽅法⽤于检查是否还有下⼀个元素,以及next() ⽅法⽤于获取下⼀个元素。:实现在抽象聚合类中声明的createIterator() ⽅法,返回⼀个与具体聚合对应的具体迭代器。:定义了创建迭代器的接⼝,包括⼀个createIterator ⽅法⽤于创建⼀个迭代器对象。

2024-07-04 09:15:00 490

原创 C++设计模式----命令模式

其允许将请求封装成⼀个对象(命令对象,包含执⾏操作所需的所有信息),并将命令对象按照⼀定的顺序存储在队列中,然后再逐⼀调用执⾏,这些命令也可以⽀持反向操作,进⾏撤销和重做。(2)创建具体命令类(Concrete Command):继承自抽象命令类,实现具体的命令操作,同时持有一个命令接收者对象。(1)定义抽象命令类(Command):创建一个抽象类或者接口,其中包含一个纯虚的执行方法,用于执行具体的命令操作。(1)可能导致系统类的数量增加:需要定义多个命令类和相关的处理类。

2024-07-04 08:30:00 306

原创 C++设计模式---模版方法模式

在抽象类中定义一系列基本操作,这些基本操作可以是具体的,也可以是抽象的,每一个步骤,在其子类中可以重复定义并实现一个算法的各个步骤。具体子类是抽象类的子类,用于实现在父类中定义的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中实现的具体基本操作。(2)是一种类库技术,提取累的公共行为,将公共行为放在父类中,而通过其子类可以实现不同的行为。(3)提供了一种反向的控制结构,通过一个父类调用其子类的操作,通过对子类的扩展而增加新行为。(1)模板方法模式可以在子类中定义详细的处理算法时不会改变算法的结构。

2024-06-27 08:15:00 386

原创 C++设计模式---享元模式

当客户端请求一个享元对象时,享元工厂会首先检查是否已存在具有相同内部状态的享元对象,如果存在则直接返回该对象,否则创建一个新的享元对象并存储起来。(2)对象的创建和销毁代价较大:如果对象的创建和销毁需要消耗大量的计算资源或时间,使用享元模式可以通过复用已有的对象来避免不必要的创建和销毁操作,从而提高系统的性能。(1)系统中存在大量相似对象:当系统中需要创建大量细粒度的对象,并且这些对象具有相同的内部状态时,可以使用享元模式来减少对象的数量,节省内存空间。(2)提高了系统的性能,减少了对象的创建和销毁次数。

2024-06-27 08:00:00 737

原创 C++设计模式---代理模式

(1)远程代理(Remote Proxy):为一个位于不同地址空间的对象提供一个本地的代理对象,这个对象作为该远程对象的代表,以隐藏一个对象存在于不同地址空间的事实。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。(2)代理对象(Proxy):持有目标对象的引用,控制对目标对象的访问,并可能提供额外的功能。(1)目标对象(Real Subject):代理对象所代表的真实对象,是最终要引用的对象。

2024-06-15 14:48:06 505

原创 C++设计模式---外观模式

(1)Facade(外观):这是客户端调用的接口,它知道哪些子系统类负责处理请求,并将客户端的请求代理给适当的子系统对象。(2)Subsystems(子系统):这些是实现系统功能的类,但客户端通常不直接与之交互。这种模式隐藏了子系统的复杂性,并为客户端提供了一个简单的接口。(2)解耦客户端和子系统。(5)多个复杂类交互简化。(3)隐藏子系统复杂性。(4)游戏配置设置。

2024-06-15 14:47:50 154

原创 C++设计模式---组合模式

(1)组件(Composite):这个抽象类或接口定义了所有组件都具有的公共行为。它通常有一个或多个方法来访问其子组件,并且可以包含一个指向子组件的指针数组。(3)复合组件(Composite):这是有子组件的组件,它们除了实现组件接口外,还负责维护子组件的列表,以及调用相应的方法对它们进行操作。(2)具体组件(Leaf):这是没有子组件的组件,它们直接实现了组件接口。(3)可以统一处理所有类型的组件,无论是简单的还是复杂的。每个组件都可能包含一个或多个子组件,而不需要了解子组件的具体类型。

2024-06-14 08:30:00 168

原创 C++设计模式----桥接模式

通过调用“Attribute”类的方法和“Skill”类的方法,可以处理人物角色的属性和技能。图形界面库通常提供一组通用的界面元素(如按钮、文本框、下拉菜单等),同时也提供多种不同的绘制方式(如窗口系统的绘制、OpenGL的绘制等)。在国际化应用中,桥接模式可以将界面的逻辑(如按钮、标签、提示信息等)与具体语言环境(如英文、中文、法文等)分离。在游戏开发中,人物角色通常具有多种不同的属性和技能(如力量、敏捷、法力等),同时人物角色还可以使用多种不同的武器和装备(如剑、弓、盾等)。(2)操作系统文件系统。

2024-06-14 08:00:00 894

原创 C++设计模式---建造者模式

使用建造者模式可以将对象的创建过程封装在建造者类中,只向客户端提供构建对象的接口,从而隐藏了对象的创建细节。(2.1)当对象的创建流程是固定的,即无论创建多少个对象,其构建步骤都是相同的时候,可以使用建造者模式。建造者模式(Builder Pattern)是一种对象构建的设计模式,它允许你以一种逐步的方式创建复杂对象,同时隐藏了对象的内部表示和装配过程。(1.2)例如,在构建一个包含多个属性(如底盘、发动机、轮胎等)的汽车对象时,使用建造者模式可以确保每个属性都得到正确的初始化。

2024-06-13 08:45:00 525

原创 C++设计模式---原型模式

在这个过程中,不需要重新初始化新对象,而是直接复制原型对象的数据和结构,因此可以显著提高性能。原型模式特别适用于需要创建大量相似对象的情况,或者对象的创建过程非常耗时和资源密集。浅拷贝只会复制对象本身的属性值(如果是指针类型,则只复制指针地址,而不是指针指向的数据)。浅克隆只复制对象本身和对象中的值类型字段,对于引用类型字段,只复制引用但不复制引用的对象。而深克隆则复制对象本身和对象中的所有字段,包括引用类型字段引用的对象。深拷贝会复制对象本身的属性值,并且如果属性是指针类型,则还会复制指针指向的数据。

2024-06-13 08:30:00 305

原创 C++设计模式---适配器模式

1、介绍1、介绍适配器模式主要包含三种角色:(1)目标接口(Target):客户端所期望的接口。目标接口可以是抽象类或接口,定义客户端期望的方法。(2)适配者(Adaptee):现有需要适配的接口。适配者通常是一个已经存在的类,其接口不符合客户端的期望。(3)适配器(Adapter):适配器类是适配器模式的核心。适配器将客户端的请求转换为对适配者的相应接口的调用。适配器可以是抽象类的子类,也可以是接口的实现类。适配器通过继承或持有适配者的方式,实现目标接口并调用适配者的方法。

2024-06-12 08:30:00 245

原创 C++设计模式---装饰器模式

(3)装饰器(Decorator):实现与组件相同的接口,它包含一个指向组件对象的指针(或者引用),并可以在调用组件的方法之前或之后添加一些额外的功能。(4)具体装饰器(ConcreteDecorator):实现装饰器接口,并添加一些额外的职责。(2)具体组件(ConcreteComponent):实现组件接口,是被装饰器装饰的对象。(1)组件(Component):定义一个对象接口,可以给这些对象动态地添加职责。(2)使用装饰器,在animal下增加一个功能类;(1)为每个动物设计三个功能子类;

2024-06-12 08:00:00 195

原创 C++设计模式---策略模式

策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的内部算法。策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。策略模式使得算法可以独立于使用它的客户端变化。(2)具体策略角色(concrete strategy):封装了相关的算法和行为。(3)环境角色(context):持有一个策略类的引用,最终给客户端调用。(1)抽象策略角色(strategy):抽象策略类。实现0、1、2三种模式,打印三种模式下的内容。

2024-06-10 20:15:00 387

原创 C++设计模式---观察者模式

(1)主题(Subject):主题是一个接口,可以把所有观察者对象登记到其观察者列表中,并且当它的内部状态发生改变时,会自动通知所有登记过的观察者对象。【在类内部建立一个vector记录所有的观察者,当主体发生变化时,遍历通知】。(4)具体观察者(ConcreteObserver):具体观察者实现了观察者接口,该接口保持一个指向具体主题的引用,以便在主题状态发生改变时得到通知。(3)观察者(Observer):观察者是一个接口,为所有的具体观察者定义一个更新接口,使得在得到主题的通知时更新自己。

2024-06-10 20:00:00 1184

原创 C++设计模式---单例模式

由于是在编译时确定的初始化,因此这种方式是线程安全的(在C++11及以后的版本中),并且不需要额外的同步机制。然而,在大多数情况下,这些缺点都是可以接受的,因为单例对象通常代表一些重要的系统资源或功能,需要尽早地初始化。通过单例模式可以创建一个缓存管理器,确保只有一个缓存实例存在,并且可以被多个线程共享,方便全局访问和统一管理缓存。当需要对资源进行集中管理,以确保线程安全的访问时,单例模式是一个不错的选择。当实例化一个类的成本较高,而且只需要一个实例时,可以使用单例模式来避免重复实例化的开销。

2024-06-08 16:47:53 1035

原创 C++设计模式---工厂模式

抽象工厂模式:优点:可以在类的内部对产品族中相关联的多等级产品共同管理,而不必专门引入多个新的类来进行管理。抽象工厂模式:适用于系统中有多个产品族,每个具体工厂创建同一族但属于不同等级结构的产品的情况。抽象工厂模式:每个具体工厂类可以创建多个具体产品类的实例,即一个工厂可以创建属于同一产品族但不同等级结构的产品。抽象工厂模式:无需指定产品的具体类,访问类可以通过抽象工厂接口获取同族的不同等级的产品。抽象工厂模式:有多个抽象产品类,每个抽象产品类都可以派生出多个具体产品类。),每个产品族都有两个具体产品(

2024-06-08 16:47:31 848

原创 可变参数函数

C++提供了两种主要的方法:(1)如果所有的实参类型相同,可以传递一个名为initializer_list的标准库类型。(2)如果所有的实参类型不完全相同,可以使用可变参数模板。另外,还有一种特殊的省略符形参,可以用它传递可变数量的实参,不过这种一般只用于与C函数交互的接口程序。在C和C++中,函数可以用省略符形参 … 表示不定参数部分,省略符形参只能出现在形参列表的最后一个位置。

2024-05-29 08:00:00 924

原创 C++之using

关键字可以将命名空间中的单个成员或整个命名空间导入到当前作用域,减少代码的冗余。可以用来为类型创建一个新的名字,方便代码维护。为模板定义一个新的别名,使得模板使用更加简洁。在使用模版的过程中,可以使用。非常长的命名空间创建一个别名,方便使用。

2024-05-29 08:00:00 227

原创 Rust之函数、单元测试

使用fn关键字定义函数,函数由函数签名和函数体组成。函数签名由函数名、参数、返回值类型组成。函数体包含于{}内,是函数要执行的具体代码。函数体:函数体由一系列语句和一个可选的结尾表达式构成。结尾表达式没有分号,代表这是一个表达式而非语句,将会自动返回表达式的值;结尾表示式的结尾如果加上分号,就变成了语句,语句没有返回值。

2024-05-26 19:00:00 706

原创 Rust之初识

/ 文件名:src/main.rsprintln!");mod 关键词定义了一个模块,看起来像 c++ 的 namespace。注意:say_hello 前面加上了 pub 关键字,表示这个函数是公开的。如果不加这个符号的话,函数只能在模块 greeting 内部使用。// 文件名:src/greeting.rsprintln!");// 文件名:src/main.rs// 文件名:src/greeting/morning.rsprintln!");

2024-05-26 18:00:00 773

原创 C++之左值、右值、完美转发

C++中,并不是所有情况下 && 都代表右值引用,在模板和自动类型推导(auto)中,如果是模板参数,想要指定为 T&&,如果是自动类型推导,需要指定为 auto&&,这两种情况下,&& 被称作“未定的引用类型”。因为 T&& 或者 auto&& 这种未定引用类型作为参数时,有可能被推导成右值引用,也有可能被推导为左值引用,在进行类型推导时,右值引用会发生变化,这种变化被称作引用折叠。(1)提供右值推导 T&& 或者 auto&& 得到的是一个右值引用类型,const T&& 表示一个右值引用。

2024-05-21 22:08:10 949

原创 shell脚本

1、介绍1、介绍shell是一个命令行解释器,用于与Linux系统交互,获得与程序相关的信息,是一系列linux命令的组合。2、命令2.1、echo用来将一段文本输出到终端或者重定向到文件中。用于查看当前用户在命令行中执行过的命令历史记录。该命令允许用户查看、搜索、编辑和执行之前执行过的命令。alias用来创建或查看命令的别名。别名是已经存在的命令的一个替代或缩写,可以简化命令行操作,提高工作效率。创建别名:alias 别名="命令"删除别名:alias -d 别名。

2024-05-21 22:07:33 908

原创 C++之std:: function和std::bind

std::function 是 C++ 标准库中的一个类模板,包含在头文件中,它用于封装可以调用的任意可调用对象,包括函数指针、函数对象、Lambda 表达式等。std::function 提供了一种通用的方式来存储、复制和调用可调用对象,使得可以将它们作为参数传递给其他函数、存储在容器中,或者作为返回值返回。它是一种多态函数包装器,可以在运行时决定具体要调用的函数或函数对象。代码:保存普通函数和类成员函数。

2024-05-16 08:00:00 402

原创 C++之lambda【匿名函数】

一般情况下,编译器可以自动推断出lambda表达式的返回类型,所以我们可以不指定返回类型。但是如果函数体内有多个return语句时,编译器无法自动推断出返回类型,此时必须指定返回类型。3。

2024-05-16 08:00:00 480

原创 C++之operator

operator是C++关键字之一, 称为重载运算符(也称“重载操作符”)。所谓重载,就是赋予新的含义。函数重载(Function Overloading)可以让一个函数名有多种功能,在不同情况下进行不同的操作。运算符重载(Operator Overloading)也是一个道理,同一个运算符可以有不同的功能。 例如,+号可以对不同类型(int、float 等)的数据进行加法操作;<<既是位移运算符,又可以配合cout向控制台输出数据。C++本身已经对这些运算符进行了重载。C++也允许程序员自己

2024-05-02 16:21:43 1766

原创 C++之模板

函数模板可以声明、定义分离;不同的是模板参数声明定义都要给。// 声明// 定义int a = 10;int b = 14;return 0;20204、类模板。

2024-05-02 12:53:38 776

原创 C++之const

1、const修饰常量。

2024-04-25 21:43:22 343

原创 C++之智能指针

C++ 98引入了第一个智能指针auto_ptr。 C++ boost引入了更加实用的scoped_ptr 、shared_ptr 、weak_ptr。 C++ 11引入了unquie_ptr、shared_ptr、weak_ptrt。需要注意的是,unique_ptr对应的是boost中的scoped_ptr。并且这些智能指针的实现是参照boost中的实现的。 智能指针不是指针,是一个管理指针的类。智能指针是利用了一种叫做RAII技术对普通的指针进行封装,这使

2024-04-20 14:26:28 700

原创 C++之强制类型转换

C++中的强制类型转换是一种将一个数据类型转换为另一个数据类型的操作。在C++中,有四种类型的强制类型转换:静态转换、动态转换、常量转换和重新解释转换。(1)静态转换(static_cast):静态转换是最常用的一种类型转换,它可以在不同但相关的类型之间进行转换,如基本数据类型之间的转换、父类指针向子类指针的转换等。但是需要注意的是,静态转换没有运行时类型检查,因此在进行转换时需要确保类型之间是相关的,否则可能会导致错误。

2024-04-13 20:22:04 715

原创 C++之类(持续更新)

(1)声明和定义都放在类体中// .h文件中public:// 共有成员(外部接口,可被使用该类的所有代码所使用的)student();~student();private:// 私有成员(只允许本类中的函数访问,而类外部的任何函数都不允许访问)int age;protected:// 保护成员(与private类似,差别表现在继承与派生时)(2)声明和定义分离// .h文件中public:// 共有成员(外部接口,可被使用该类的所有代码所使用的)student();

2024-03-16 21:28:37 1039 1

原创 C++之线程、线程池

std::thread 在 <thread> 头文件中声明,因此使用 std::thread 时需要包含 <thread> 头文件。

2024-03-16 18:11:31 259

原创 C-线程池

一个线程池由三部分组成:(1)管理者线程,用于实时判断线程池中的任务个数、线程个数;并根据两者之间的变化来创建或销毁线程,与任务队列达到平衡。对应于示例中的thread_manage()函数。(2)工作线程,线程池中线程,个数不定,在没有任务时处于等待状态,可以循环的执行任务。对应于示例中的thread_work()函数。(3)任务队列,用于存放没有处理的任务,链表、数组等结构存储。

2024-03-15 06:15:00 314

原创 C++之string

char*的字符串、C++标准程序库中的区别:string类不必担心内存是否足够、字符串长度等等,而且作为一个泛型类出现,集成的操作函数足以完成大多数情况下的需要。C++中对于strinig的定义为:typedef basic_string string;也就是说C++中的string类是一个,由模板而实例化的一个标准类,本质上不是一个标准数据类型。使用string类必须包含头文件:#include <string>

2024-03-10 21:46:42 1012 1

原创 C++之list

vector: 指一个数组(1)支持快速随机访问,即下标运算;(2)尾添加,不申请空间的情况下非常快;(3)插入和删除比较慢。list: 指一个链表(1)随机访问慢,也支持下标;(2)支持快速插入和删除。

2024-03-03 08:00:00 417 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除