自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 中介者模式

聊天室系统将包括用户(同事类)和中介者(聊天室)两个主要组件。用户可以发送消息给聊天室,聊天中介层// 抽象中介者public:// 具体中介者public:if (c!private:同事类// 抽象同事类public:protected:// 具体同事类public:std::cout << name << " 发送消息: " << message << std::endl;

2023-12-19 10:40:03 21

原创 解释器模式

我们需要开发一个简单的表达式计算程序,支持加减乘除四种算术运算,以及括号内的优先运算。程序需要解析输入的算术表达式字符串,识别其中的数字、运算符、括号等组成部分表达式中允许使用的运算符为:+ - * / ,对应的优先级依次降低括号内表达式需要优先计算,遵循合理的括号匹配规则需要正确解析表达式,构建抽象语法树(Abstract Syntax Tree, AST)程序根据构建的AST计算表达式的值,并输出结果需要能够处理错误情况,如非法表达式、缺少操作数等,并给出提示信息。

2023-11-07 11:25:39 33

原创 命令模式

假设我们在做一个游戏,游戏中有不同的角色,每个角色都可以执行不同的技能。游戏中有多种角色,如武士、法师、猎人等。每个角色都有自己独特的技能,如武士可以横扫千军,法师可以释放火球术等。玩家可以控制角色去释放技能攻击敌人。需要记录每个技能的使用日志,如火球术使用了多少次。需要有一个技能冷却系统,每个技能不能连续释放,需要冷却一段时间。未来需要不断新增角色和技能。每个技能都封装为一个命令类,实现执行技能的方法。命令类记录自己的执行日志。命令类具有冷却功能,可以避免连续释放。

2023-11-06 11:11:21 21

原创 备忘录模式

备忘录模式(Memento Pattern)是一种软件设计模式,它提供了一种捕获对象内部状态的方法,并在需要时外部化该状态,以便可以恢复到之前的状态。这个模式涉及到三个角色:发起人(Originator):要被保存状态的对象。它可以创建一个备忘录,用来记录当前时刻的内部状态,并可使用备忘录恢复到之前保存的状态。备忘录(Memento):存储发起人对象的内部状态的类。备忘录的交互限定在发起人与管理者之间。管理者(Caretaker):负责保存备忘录的对象。不检查备忘录内容,仅负责存储和提供备忘录。

2023-11-02 10:15:47 19

原创 访问者模式

访问者模式是一种对象行为型设计模式,它允许在不改变元素类的前提下定义作用于元素类的新操作。主要解决的是对象结构相对稳定,但经常需要在此对象结构上定义新的操作的问题。访问者模式可以将相关的行为局部化到一个访问者类中,而不是将这些行为分散到这个对象结构的所有类中。访问者(Visitor)角色:定义作用于元素对象的操作,它存储遍历元素对象的算法。访问者可以为每个 ConcreteElement 增加新的操作。

2023-11-01 10:18:13 21

原创 迭代器模式

假设我们有一个图书管理系统,需要管理图书馆中的所有图书。图书馆有打印版图书和电子版图书,打印版图书存储在书架上,电子版存储在服务器上。我们希望提供一个统一的界面来遍历所有图书,而不管是打印版还是电子版。图书馆有一个所有图书的列表,包括打印版和电子版图书。图书馆可以提供一个迭代器接口,用来遍历所有图书。打印版图书存储在书架上,需要提供具体的书架迭代器来遍历书架上的图书。电子版图书存储在服务器上,需要提供具体的服务器迭代器来遍历服务器上的电子图书。

2023-10-31 09:01:31 23

原创 状态模式

一个图书管理系统,需要实现图书的借阅流程。图书有以下状态:可借阅(Available):可被借阅已借出(Borrowed):已被用户借走预定(Reserved):有用户进行了预定过期(Expired):借阅期过期状态与行为:可借阅:可以借阅,可以预定已借出:可以还书预定:等待借阅,可以取消预定过期:需要收罚金,强制还书图书类public:~Book();private:实现();

2023-10-30 15:10:07 27

原创 责任链模式

检查库存:检查用户购买的商品是否有现货校验价格:校验订单中商品的价格是否正确计算运费:根据收货地址计算运费生成订单:生成订单信息发送邮件:给用户发送订单确认邮件定义职责链基类// 抽象处理者public:protected:实现具体实现类// 检查库存public:if (/* 检查库存 */stock[request] > 10) {cout << "库存检查通过" << endl;} else {cout << "商品库存不足" << endl;

2023-10-27 11:03:07 17

原创 策略模式

策略模式(Strategy Pattern)是一种软件设计模式,属于行为型模式。它定义了一系列算法,将每个算法封装起来,并让它们可以相互替换。策略模式可以让算法独立于使用它的客户而变化,从而使得系统更容易扩展。工厂模式是解耦对象的创建和使用,观察者模式是解耦观察者和被观察者。策略模式跟两者类似,也能起到解耦的作用,不过,它解耦的是策略的定义、创建、使用这三部分。Context- 环境类,持有一个 Strategy 对象,通过调用 Strategy 来执行算法。Strategy。

2023-10-26 11:19:58 19

原创 模版模式

模板方法(Template Method)是一种设计模式,属于行为型设计模式。其核心思想是:在抽象父类中定义了一个算法的骨架,里面有一些抽象的方法。子类继承这个抽象类,需要重写这些抽象方法来完成算法中某些步骤。子类不需要重写整个算法流程,就可以重定义算法中的某些部分。封装不变部分,扩展可变部分。把相同流程封装到抽象父类模板方法中,将可变部分留给子类实现。复用代码。子类可以复用抽象类中封装的算法流程代码。符合开闭原则。通过扩展子类而非修改父类模板方法来改变算法。

2023-10-25 11:24:55 28 1

原创 观察者模式

观察者模式(Observer Pattern),它定义对象之间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.主题将所有观察它的对象保存在一个集合中。当主题状态发生改变时,会遍历所有观察者,调用它们的更新方法。观察者收到通知后会执行相应的更新逻辑。观察者模式可以实现对象之间的松耦合,当主题状态发生改变时,可以通知多个观察者对象,而无需每个观察者都了解主题的具体实现. 适用于需要维护对象之间一致性的系统.

2023-10-24 11:17:47 25

原创 享元模式

假设我们要开发一个国际象棋游戏,chessboard 上一共有32个棋子。如果对每个棋子都创建一个对象,那会产生大量相似的对象并浪费内存。使用享元模式,可以把棋子分为两类状态:内部状态:棋子的名称(king, queen, pawn 等),颜色(黑色或白色)。这部分对每种棋子只需要创建一次。外部状态:棋子的当前位置。这需要每个棋子都单独保存。那么我们可以创建一个 ChessPiece 类代表内部状态,里面有棋子的名称和颜色属性。

2023-10-23 11:25:12 30

原创 组合模式

组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次关系。组合模式的定义:将对象组合成树形结构以表示部分-整体层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。Component:组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。Leaf:叶子构件,叶子对象没有子对象,定义叶子对象的行为。Composite:容器构件,存储子部件,在Component接口中实现子部件管理的相关操作,如添加和删除等。

2023-10-20 11:16:11 22 1

原创 外观模式

门面模式为子系统提供一组统一的接口,定义一组高层接口让子系统更易用。一下举个例子说明假设有a, b, c, d 四个细颗粒接口, 业务需要使用a, b, d, 那就可以使用 门面模式将a, b, d包裹起来对外提供一个门面接口 x直接给业务调用.那么为什么不直接使用三个接口, 而是又封装一层呢?假设系统调用接口通过网络通信获取数据, 一般网络通信耗时比较多, 为了提高响应速度, 我们要尽量减少系统间的网络通信次数.

2023-10-19 10:05:41 25

原创 适配器模式

适配器模式**(Adapter Pattern),** 也称为包装器模式**(Wrapper Pattern),** 是一种结构型设计模式。该模式允许对象的接口与客户端的期望接口不匹配时协同工作. 适配器模式创建一个包装类, 该包装类包含了原始类的实例, 并实现了客户端所期望的接口. 通过这种方式, 适配器模式允许原始类与客户端协同工作, 尽管它们的接口不一致.强调一个类的接口适配成另一个类的接口, 使原本不兼容的类能够协同工作.通常有两种主要类型:类适配器, 使用多继承或接口实现来适配接口.

2023-10-18 11:07:07 29

原创 装饰器模式

装饰器模式允许你附加新的行为到对象实例上,同时保持对象类的完整性。装饰器模式通常用于通过递归组合方式,使类能够包含更多的责任,同时保持系统中的每个类小而简单。装饰器模式用于在运行时动态添加功能,而桥接模式用于将抽象和实现分离以处理多维度的变化。主要目的装饰器模式的主要目的是动态地为对象添加行为,而不修改其原始类。它用于在运行时包装对象,以添加新的功能,例如添加额外的操作或状态。装饰器模式关注对象的功能扩展。桥接模式的主要目的是将抽象和实现分离,使它们可以独立变化。

2023-10-17 10:28:19 26

原创 桥接模式

桥接模式应该是比较难理解的模式之一, 但是代码的实现相对简单.对于这个模式可能有两种不同的理解方式“将抽象和实现解耦,让它们可以独立变化。“一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。通过组合关系来替代继承关系, 避免继承层次的指数级爆炸. 这种理解方式非常类似于组合优于继承设计原则.

2023-10-16 11:26:10 23 1

原创 代理模式

简单回顾下创建型模式接下来就是机构型模型结构型模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式。

2023-10-13 10:42:37 31

原创 原型模式

通过一个已有对象, 获得更多相同或相似的对象.使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。

2023-10-12 10:16:44 25

原创 单例模式

单例模式理解起来比较简单, 就是一个类 它只允许创建一个对象或者实例, 那这个类就是单例类.

2023-10-11 12:12:59 33

原创 建造者模式

建造者模式将包含多个部件的对象的构建过程进行剥离, 客户只需要给出他需要的部件类型, 不用关心如何构建, 以及构建的细节.比如你,我都需要造一间房子, 造房子的过程无非是从打地基, 筑墙, 装修等过程, 但是最后你, 我期望的房子的风格肯定是不一样的, 最终建造的房子肯定呈现不同风格.

2023-10-10 12:02:22 29 1

原创 抽象工厂模式

一个工厂不止可以建造一个产品, 他可以建造多个. 比如一个关于运动工厂, 他可以建造篮球, 足球 …总之,一个工厂可以提供创建多种相关产品的接口,而无需像工厂方法一样,为每一个产品都提供一个具体工厂。抽象工厂模式结构与工厂方法模式结构类似,不同之处在于,一个具体工厂可以生产多种同类相关的产品:抽象工厂(AbstractFactory):所有生产具体产品的工厂类的基类,提供工厂类的公共方法;具体工厂(ConcreteFactory):生产具体的产品。

2023-10-09 10:06:06 32 1

原创 工厂方法模式

简单工厂每次增加一个产品都需要修改工厂代码内部的逻辑, 为了遵循开闭原则, 工厂方法将不在使用一个工厂统一进行所有产品的生产, 而是每一个产品都由一个工厂进行生产.抽象工厂(AbstractFactory):所有生产具体产品的工厂类的基类,提供工厂类的公共方法;具体工厂(ConcreteFactory):生产具体的产品抽象产品(AbstractProduct):所有产品的基类,提供产品类的公共方法具体产品(ConcreteProduct):具体的产品类。

2023-10-08 15:11:49 34 1

原创 简单工厂模式

创建型模式主要关注对象创建的过程, 论述是如何将对象的创建和使用进行分离, 让用户在使用对象时无须关心创建对象的细节, 从而降低系统的耦合度.简单工厂 作为最基础的设计模式之一, 并不属于gof 的23 个设计模式, 但也是其余创建型模式的基础工厂(Factory):根据客户提供的具体产品类的参数,创建具体产品实例;抽象产品(AbstractProduct):具体产品类的基类,包含创建产品的公共方法;具体产品(ConcreteProduct)

2023-10-08 11:41:12 41 1

原创 设计模式

设计模式是一种通用的、可重复利用的解决特定问题的软件设计方法。设计模式提供了在开发中常见问题的解决方案,它们是经过验证的最佳实践,有助于提高代码的可维护性、可读性和可扩展性。如果元素具有高度相关的职责,除了这些职责内的任务,没有其它过多的工作,那么该元素就具有高内聚性;反之则成为低内聚性。总之,使用设计模式可以提高软件的质量,减少错误,提高开发效率,并使代码更容易维护和扩展。低耦合:耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。

2023-10-08 11:29:30 30 1

原创 小白学C语言 数组篇

数组一次性声明多个同类型的变量(1)声明 定义 数组数据类型 数组名[数组长度];声明定义一个数组,且相当于声明了 数组长度 个同类型变量int scores[10];scores[0] scores[1] scores[2] … scores[9] 这10个int类型变量通过数组声明的变量同名,为了区分这些变量需要通过下标来访问这些变量访问数组元素:数组名[下标];下标:...

2019-07-21 23:52:43 7378

原创 小白学C语言基础2

语句1.顺序执行语句2.分支选择语句条件成立则执行if(){}二者执行其一if(){}else{}多种情况if(){}else if(){}else if(){}多种情况择其一if(){}else if(){}else if(){}else{}if注意事项:(i)如果分支语句只有一条语句时 可以省略{} 但是不建议省略(ii) if(...

2019-07-21 23:46:24 196

原创 c语言的基础学习

**c语言的基础学习**基本数据类型整型: short int long浮点: float double字符: charunsigned:表示无符号的数signed :有符号 默认就是有符号的char 1字节 8bit -128,127unsigned char 1字节 ...

2019-07-14 14:20:37 236 2

空空如也

空空如也

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

TA关注的人

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