自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 dos2linux文件转换

文章目录一、文件格式转换一、文件格式转换指定路径下所有cpp和h文件从windows转为linux。#!/bin/bashfunction mydos2unix() { for file in `ls $1` do file_extension=${file##*.} if [ -d $1/$file ]; then mydos2unix $1/$file elif [ $file_extension =..

2021-12-29 15:52:47 217

翻译 c++ 类设计者的核查清单

文章目录清单列表清单列表1.你的类需要一个构造函数嘛?2.你的数据成员是私有或者保护的嘛?3.你的类需要无参的构造函数嘛?4.每个构造函数是否都初始化了所有成员?5.类需要析构函数嘛?6.类需要拷贝构造函数和拷贝赋值运算符嘛?(3.5法则,第五条需要则第六条也需要)7.类需要一个虚析构函数嘛?8.赋值运算符处理了对象自我赋值的情形嘛?9.你的类提供了关系操作符了嘛?10.删除数组时用了delete[]了嘛?11.拷贝构造函数和拷贝复制运算符的参数是否是const引用?12...

2021-12-25 11:13:08 148

原创 protobuf学习、安装、c++练习,适合小白!2021-5-17

文章目录前言一、protobuf语法详解二、protobuf安装三、c++练习总结前言本文对protobuf进行简单的介绍,适合新手入门了解练习使用。一、protobuf语法详解protobuf是google团队开发的用于高效存储和读取结构化数据的工具。什么是结构化数据呢,正如字面上表达的,就是带有一定结构的数据。比如电话簿上有很多记录数据,每条记录包含姓名、ID、邮件、电话等,这种结构重复出现。xml、json也可以用来存储此类结构化数据,但是使用protobuf表示的数据能更加高效,并且将

2021-05-17 19:13:59 216

原创 windows平台中使用vscode远程连接linux进行c++开发配置教程(内容详细适合小白)-2021-3-30

文章目录一、简要介绍二、软件安装步骤1.vscode安装总结一、简要介绍vscode作为广受欢迎的程序编辑器,可以支持多种语言编写,并提供了丰富和强大的插件。Remote-ssh是vscode提供的ssh服务插件,基于此插件可以实现在windows平台下远程连接linux平台进行软件开发,这种方式也成为了腾讯阿里等互联网企业广受欢迎的开发方式之一。本文将详细介绍在windows平台中使用vscode远程连接linux进行c++开发的软件安装和系统配置教程,如有错误,请指正。二、软件安装步骤1.v.

2021-03-30 20:18:46 1582 5

原创 小白学协程笔记4-tencent libco解析-2021-2-22

文章目录前言一、结构体定义1.协程栈定义2.协程定义3.协程上下文定义4.协程环境定义二、API定义1.协程调度器初始化及获取函数2.协程创建函数3.协程启动/恢复函数4.协程挂起函数5.协程切换函数总结前言本文对腾讯微信的协程库libco进行了简单解析,如有不当,请指正。一、结构体定义1.协程栈定义libco使用的协程栈定义如下,支持独立栈和共享栈两种方式。struct stStackMem_t{ stCoRoutine_t* occupy_co; // 当前正在使用该共享栈的协程.

2021-02-22 16:39:14 304

原创 小白学协程笔记3-实现自己的协程库(独立栈,共享栈)-2021-2-22

文章目录前言一、协程库实现-独立栈1.协程结构体定义2.协程调度器定义3.协程创建函数4.协程启动/恢复函数5.协程挂起函数6.判断协程是否运行完毕函数7.使用示例二、协程库实现-共享栈1协程及调度器结构体定义1.协程创建删除工具函数2.调度器创建、关闭函数3.协程创建函数4.协程挂起函数5.协程启动/恢复函数6.其余函数7.应用实例总结前言前面介绍了协程的基本概念和协程切换的常见方式以后,本文将介绍如何通过c语言实现自己的协程库,分为独立栈和共享栈两种实现,代码见git仓库。一、协程库实现-独.

2021-02-22 11:48:18 795

原创 小白学协程笔记2-c语言实现协程-2021-2-10

文章目录前言一、c语言中协程切换方式二、使用setjmp 和 longjmp实现协程切换1.引入库2.读入数据总结前言前面我们已经了解到协程的基本概念以及对称协程和非对称协程的定义,本节将对如何用c语言在用户态实现协程切换作以简单介绍。一、c语言中协程切换方式c/c++在C++20标准之前并不支持协程,所以很多大佬都通过自己的方法实现了协程切换,主要分类如下:1.使用setjmp 和 longjmp实现。2.使用switch-case等技巧实现。3.使用汇编语言实现。4.使用ucont.

2021-02-17 11:13:47 501 1

原创 小白学协程笔记1-协程概念初识-2021-2-10

文章目录前言一、从进程、线程到协程1.进程2.线程3.协程二、对称协程和非对称协程三、常见语言对协程的支持总结前言本文对协程的概念做了简要介绍,适合初次接触协程的小白。一、从进程、线程到协程1.进程学习操作系统知识时,进程是必然绕不开的一个概念。什么是进程呢?简单来说,进程是程序的一个运行实例,是正在运行程序的一种抽象。比如当你打开游戏时,操作系统中就会创建一个游戏进程,当退出游戏时,对应进程也会终止。那为什么要引入进程这一个概念呢?众所周知,操作系统具有并发、共享、异步、虚拟的特性。其中.

2021-02-10 11:58:36 404

原创 Redis使用及源码剖析-21.Redis集群-2021-2-4

文章目录前言一、节点1.节点启动2.集群数据结构3.CLUSTER MEET 命令的实现二、槽指派1.记录节点的槽指派信息2.传播节点的槽指派信息3.记录集群中所有槽的指派信息三、在集群中执行命令四、重新分片总结前言集群是Redis提供的分布式数据库方案,集群通过分片进行数据共享,并提供复制和故障转移功能一、节点一个 Redis 集群通常由多个节点(node)组成, 在刚开始的时候, 每个节点都是相互独立的, 它们都处于一个只包含自己的集群当中, 要组建一个真正可工作的集群, 我们必须将各个独.

2021-02-04 17:54:38 174

原创 Redis使用及源码剖析-20.Redis哨兵(Sentinel )-2021-2-4

文章目录前言一、Redis哨兵简介二、初始化哨兵节点1.初始化服务器2.使用哨兵专用代码3.初始化哨兵状态4.初始化 Sentinel 状态的 masters 属性5.创建连向主服务器的网络连接三、获取主服务器信息四、获取从服务器信息五、向主从服务器发送信息六、从主从服务器接收信息1.更新sentinels词典2.创建连向其他哨兵的命令连接七、检测主观下线状态八、检查客观下线状态九、选举领头哨兵十、故障转移前言哨兵(Sentinel )是Redis高可用性的解决方案,本文将对其进行简单介绍一、R.

2021-02-04 16:44:03 266

原创 Redis使用及源码剖析-19.Redis复制-2021-2-4

文章目录前言一、同步实现1.完整重同步2.部分重同步a.复制偏移量b.复制积压缓冲区c.服务器运行id二、复制的完整过程1.设置主服务器的地址和断开2.建立套接字连接3.发送ping命令4.身份认证5.发送端口信息6.同步7.命令传播总结前言Redis中用户可以执行slaveof命令让一个服务器去复制另一个服务器,被复制的服务器称为主服务器,另一个服务器称为从服务器。例如服务器127.0.0.1:6379从服务器127.0.0.1:12345复制内容的命令如下所示:127.0.0.1:6379&g.

2021-02-04 11:17:21 124

原创 Redis使用及源码剖析-18.Redis二进制位数组、慢查询日志和监视器实现-2021-2-3

文章目录前言一、二进制位数组1.二进制位数组命令2.位数组表示3.setbit getbit命令实现3.bitcount命令实现4.源码二、慢查询日志1.慢查询日志简介2.慢查询日志保存3.慢查询日志添加三、监视器1.监视器简介2.称为监视器3.向监视器发送消息总结前言本文对Redis的二进制位数组,慢查询日志和监视器作以简要介绍。一、二进制位数组1.二进制位数组命令Redis提供了setbit getbit bitcount和bitop四个命令用于处理二进制位数组,如下所示://设置某一.

2021-02-03 18:53:28 167

原创 Redis使用及源码剖析-17.Redis排序-2021-2-3

文章目录一、排序命令二、命令实现1.排序对象定义2.sort key命令实现3.alpha选项实现4.by选项实现三、排序源码总结一、排序命令Redis 的sort命令可以对列表键、集合键或者有序集合键的值进行排序,如下所示://列表排序redis>rpush nums 3 1 2redis>lrange nums 0 -13 1 2redis>sort nums1 2 3 //集合排序,alpha表示按照字母顺序排序redis>sadd str aaa bb.

2021-02-03 10:13:21 193

原创 Redis使用及源码剖析-15.Redis发布订阅-2021-2-2

文章目录前言一、发布订阅命令简介二、频道的订阅和退订1.频道订阅2.频道退订2.频道退订四、发布消息五、Redis源码总结前言本文对Redis的发布订阅功能的实现做了简单介绍,包括发布订阅命令和内部实现一、发布订阅命令简介redis客户端可以订阅某个频道或者模式,这样当其他客户端向该频道发布了消息时,订阅了该频道的客户端以及订阅了和该频道匹配模式的客户端就可以收到。命令如下:subscribe "news.it" //订阅news.it频道unsubscribe "news.it" //退.

2021-02-02 18:30:16 136

原创 Redis使用及源码剖析-14.Redis服务器-2021-1-28

文章目录前言一、命令执行过程1.客户端发送命令2.服务端读取命令请求总结前言Redis服务器负责和多个客户端建立网络连接,为多个客户端提供服务,本文对Redis服务器进行简要介绍,包括客户端到服务器的命令执行过程、服务器执行的周期性函数以及服务器的初始化。一、命令执行过程1.客户端发送命令Redis 服务器的命令请求来自 Redis 客户端, 当用户在客户端中键入一个命令请求时, 客户端会将这个命令请求转换成协议格式, 然后通过连接到服务器的套接字, 将协议格式的命令请求发送给服务器, 如下.

2021-01-28 11:55:48 189

原创 Redis使用及源码剖析-13.Redis客户端-2021-1-27

文章目录前言一、客户端结构体简介1.套接字描述符2.名字3.标志4.输入缓冲区5.命令和命令参数6.命令的实现函数7.输出缓冲区8.身份认证9.时间10.完整结构体二、客户端创建与关闭1.普通客户端创建2.普通客户端关闭3.lua脚本的伪客户端4.aof文件的伪客户端总结前言Redis服务端是典型的一对多程序,可以为多个客户端提供服务,Redis服务端结构体中的clients链表中保存了所有的客户端信息,如下所示:struct redisServer { // 一个链表,保存了所有客户端状.

2021-01-27 20:14:56 167

原创 Redis使用及源码剖析-12.Redis事件模型-2021-1-27

文章目录前言一、文件事件1.文件事件处理器简介2.文件事件处理器组成3.IO多路复用程序实现4.事件类型5.事件处理器二、时间事件1.时间事件简介2.定时事件和周期事件三、事件调度四、事件API1.事件结构体定义2.事件循环处理器创建函数3.事件调用主函数4.IO多路复用实现总结前言Redis服务端是一个事件驱动程序,本文将对服务端需要处理的文件事件和时间事件进行简单介绍。一、文件事件1.文件事件处理器简介Redis服务端和客户端通过套接字进行通信,所谓文件事件就是套接字操作的抽象,如写事件.

2021-01-27 12:40:27 208 1

原创 Redis使用及源码剖析-11.Redis持久化-2021-1-27

文章目录前言一、RDB持久化1.RDB持久化简介2.RDB文件的创建3.RDB文件的载入4.RDB文件结构分析5.SAVE函数二、AOF持久化1.AOF持久化简介2.AOF缓存区3.AOF文件写入及追加4.AOF重写5.AOF文件写入同步函数总结前言众所周知Redis是基于内存的key-value型数据库,这样每次执行数据库操作时只涉及到内存,不涉及磁盘读取写入,效率很高。但是随之而来的问题便是当服务端进程正常或者异常退出时,如何保证数据的安全性和可靠性,这就涉及到持久化的问题。Redis持久化分为.

2021-01-27 11:31:46 206

原创 Redis使用及源码剖析-10.Redis数据库-2021-1-27

文章目录前言一、数据库概念简介1.数据库定义2.数据库切换3.数据库键空间4.过期时间设置5.过期删除策略6.数据库通知二、数据库相关API1.数据库通知函数2.过期检查函数3.切换目标数据库函数4.设置过期时间函数5.查找key对应值函数总结前言本文对Redis的数据库文件进行简要介绍,包括数据库的选择,键的新建更新删除、Redis过期策略以及事件通知等。一、数据库概念简介1.数据库定义Redis在redis.h中定义了数据库结构redisDb ,如下所示:/* Redis databa.

2021-01-26 19:17:33 176

原创 Redis使用及源码剖析-9.Redis键操作函数-2021-1-26

文章目录前言一、Redis客户端结构体简介二、字符串键函数1.set系列函数2.incr decr函数三、列表键函数1.添加元素函数2.设置指定位置索引函数3.获取列表范围元素的函数四、哈希键函数1.获取指定字段的值2.获取哈希表容量五、集合键函数1.向集合添加元素2.判断元素是否在集合内部六、有序集合键函数1.从有序集合删除元素2.获取指定元素分值总结前言前面已经了解到Redis包括五种类型的对象:字符串对象、列表对象、哈希对象、集合对象和有序集合对象。对象的底层由SDS、双向链表、压缩列表、跳表.

2021-01-26 15:32:36 169

原创 Redis使用及源码剖析-8.Redis对象-2021-1-21

文章目录前言一、Redis对象模型二、字符串对象1、字符串对象编码形式2、字符串对象编码转换三、列表对象1、列表对象编码形式2、列表对象编码转换四、哈希对象1、哈希对象编码形式2、哈希对象编码转换五、集合对象1、集合对象编码形式2、集合对象编码转换六、有序集合对象1、有序集合对象编码形式2、有序集合对象编码转换七、键类型检查八、命令多态实现九、引用计数十、空转时长总结前言本文对Redis中的五种对象模型进行了简单整理,简要介绍了其内部实现机理。一、Redis对象模型 Redis对象系统包含字符.

2021-01-21 11:06:41 115

原创 Redis使用及源码剖析-6.Redis整数集合-2021-1-20

文章目录前言一、整数集合实现二、intset api1.根据值确认编码方式2.根据值确认编码方式3.获取指定索引的元素4.设置指定索引的元素5.在集合中查找指定元素的位置6.集合编码方式升级7.集合元素移动8.集合元素增加删除总结前言整数集合(intset)是集合键的底层实现之一: 当一个集合只包含整数值元素, 并且这个集合的元素数量不多时, Redis 就会使用整数集合作为集合键的底层实现。整数集合涉及的文件是intset.h和intset.c一、整数集合实现整数集合(intset)是 Re.

2021-01-20 10:41:23 84

原创 Redis使用及源码剖析-5.Redis跳跃表-2021-1-19

文章目录前言一、跳表节点实现二、跳表实现三、跳表API1、随机生成层数2、创建跳表节点3、创建跳表4、计算节点排位5、插入新节点6、删除节点总结前言跳跃表是Redis的底层数据结构之一,跳跃表(skiplist)是一种有序数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的。跳跃表支持平均 O(\log N) 最坏 O(N) 复杂度的节点查找, 还可以通过顺序性操作来批量处理节点。在大部分情况下, 跳跃表的效率可以和平衡树相媲美, 并且因为跳跃表的实现比平衡树要来得.

2021-01-19 16:34:03 139

原创 Redis使用及源码剖析-3.Redis链表-2021-1-17

文章目录前言一、链表简介二、链表实现1.链表节点实现2.链表实现3.链表迭代器实现4.链表API总结前言本文对Redis的底层数据结构链表做了简要介绍,涉及的文件是adlist.h和adlist.c。一、链表简介链表是一种非常常用的数据结构,在很多高级语言中都有实现。Redis 使用的 C 语言并没有内置这种数据结构, 所以 Redis 构建了自己的链表实现。链表在 Redis 中的应用非常广泛, 比如列表键的底层实现之一就是链表: 当一个列表键包含了数量比较多的元素, 又或者列表中包含的元.

2021-01-17 15:03:57 141

原创 Redis使用及源码剖析-2.Redis简单动态字符串(SDS)-2021-1-16

文章目录前言一、SDS介绍1.SDS定义2.柔性数组简介二、SDS和c语言字符串对比1.SDS可以常数时间获取字符串长度2.SDS可以杜绝缓冲区溢出3.减少修改字符串带来的内存重分配次数4.SDS是二进制安全的5.SDS支持部分c函数总结前言本文对Redis的简单动态字符串(simple dynamic string)进行了简要介绍,并结合sds对Redis的内存分配释放api进行分析,涉及的源码文件为sds.h、sds.c、zmalloc.h、zmalloc.c,源码下载地址为https://gi.

2021-01-17 10:28:47 348 1

原创 Redis使用及源码剖析-1.Redis入门基础命令-2021-1-16

文章目录前言一、Redis是什么?二、Redis 对象简介三、字符串对象操作四、列表对象操作五、哈希对象操作六、集合对象操作七、有序集合对象操作八、对象共有操作总结前言本文针对redis五种类型的对象操作进行了简单整理,如有不当之处,可交流讨论。一、Redis是什么?Redis全称为Remote DIctionary Server(Redis) ,是一个由Salvatore Sanfilippo写的key-value型的数据存储系统。简而言之,Redis是一个key-value类型的非关系型数.

2021-01-16 15:47:29 179

原创 大话设计模式15-职责链模式-2021-1-12

文章目录一、职责链模式是什么?二、代码实现总结一、职责链模式是什么?使得多个对象都有机会处理请求,避免请求的发送者和接收者之间的耦合关系。将对象连成一个链条,请求按照链条传递,直到可处理为止。二、代码实现代码如下(示例)://15.职责链条模式enum REQUEST_TYPE{ REQUEST_ASK_FOR_LEAVE=0, REQUEST_ADD_SALARY};typedef struct _request{ string text; REQUEST_TYPE type.

2021-01-12 18:07:53 80

原创 大话设计模式14-建造者模式-2021-1-12

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、建造者模式是什么?二、具体代码总结一、建造者模式是什么?当需要创建一个复杂的对象,并且对象的建造顺序稳定时,为了使得建造代码和表示代码相分离,隐藏对象建造过程,可以使用建造者模式。类图示意如下:其中builder类定义了对象建造使用的抽象接口,concretebuilder类定义了不同对象的具体接口,director类调用具体对象接口,按照一系列顺序建造对象。二、具体代码代码如下(示例)://14 建造者模式c

2021-01-12 16:28:52 111

原创 2021-1-7-一文掌握git/github使用,内容详细,适合新手入门~

文章目录前言一、git是什么?二、使用步骤1.引入库2.读入数据总结前言本文先结合版本控制系统对git进行了简要介绍,再详细讲述了github注册使用教程和git安装使用教程,希望对和楼主一样的小白有所帮助。一、git是什么?现代软件开发过程中离不开版本控制系统,版本控制系统可以存储、追踪目录(文件夹)和文件的修改历史,是提高开发效率的利器。目前常见的版本控制系统有git和svn,Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制系统。它和

2021-01-09 11:06:02 1139 5

原创 2020-11-28-归并排序和原地归并

归并排序和原地归并前言一、什么是归并排序?二、原地归并总结前言9月份面试找工作的时候,被中国“排名第三”的互联网公司问到常见排序算法的时间和空间复杂度。其中说到归并排序的时候,面试官问我知不知道原地归并?我一脸懵逼,大意了没有闪,hh虽然最后拿到了offer,但是本着程序猿求知若渴的精神,还是写一下此文和分享一下自己理解的原地归并。一、什么是归并排序?    在说原地归并之前,先简要介绍一下归并排序。归并排序是冯诺依曼首次提出的一个排序算法,这也是第一个在 最坏情况下时间复杂度可以达到O(nlo

2020-11-28 16:44:38 536

原创 2020-11-12 跳表

文章目录前言一、什么是跳表二、c++实现代码前言用c++实现一个简单跳表。一、什么是跳表跳表的介绍很多数据结构中都有,第一次了解的推荐看一下这片博客:https://blog.csdn.net/daniel_ustc/article/details/20218489 ,在这里就不介绍了二、c++实现代码代码如下(示例):#include <limits.h>#include <vector>#include <iostream>using nam

2020-11-12 20:08:36 76

原创 大话设计模式13-命令模式-2020-9-24

1.命令模式简介命令模式:将一个请求封装为一个对象,从而使得你可用不同的请求对客户进行参数化;对请求排队或者记录日志,以及支持可撤销的操作。UML类图如下:2.实例定义几个类模拟烧烤店烧烤场景,具体类图如下:c++ 代码实现如下:#include<exception>#include <iostream>#include<string>#include<list>using namespace std;//13.命令模式:烧烤店烧烤

2020-09-24 16:42:16 82

原创 大话设计模式12-桥接模式-2020-9-24

1.桥接模式简介桥接模式:将抽象部分和它的实现部分分离,使它们都可以独立的变化。通俗的说,当一个系统有多角度分类,并且每一种分类都可能有变化时,就可以将这种多角度分离出来,让他们独立变化,减少他们之间的耦合。UML类图如下:2.实例桥接模式其实也是采用了优先使用合成/聚合复用,而不是继承这个原则。继承是一定是一种is-a的关系,当不是这种关系是,尽量不要继承。不然父类和子类是一种强耦合的关系,如果父类改变,子类都要改变。采用桥接模式完成手机安装软件的设计,UML类图如下:c++ 代码实现如下:

2020-09-24 15:51:00 81

原创 大话设计模式11-单例模式-2020-9-24

1.单例模式简介单例模式:保证一个类只有一个初始化实例。可以通过将构造函数定义为私有的,并提供静态公有的初始化方法实现。2.实例c++实现了一个简单的单例模式懒汉版本,未考虑多线程冲突问题。//11.单例模式class Singleton{public: static Singleton *getInstance() { if (m_pSingleton==NULL) { m_pSingleton = new Singleton; } return m_pSing

2020-09-24 15:28:14 75

原创 大话设计模式10-组合模式-2020-9-24

1.组合模式简介组合模式:将对象组合成树形结构来表示“部分-整体”的关系,组合模式使得单个对象和组合对象使用具有一致性。UML类图如下:2.实例实现一个公司的办公管理系统,父公司下面可能既有子部门也有子公司。UML类图如下:c++代码实现如下:#include<exception>#include <iostream>#include<string>#include<list>using namespace std;//10.组合模式

2020-09-24 15:12:45 82

原创 大话设计模式09-备忘录模式-2020-9-24

1.备忘录模式简介备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态,这样以后就可以将对象恢复到原先保存的状态。UML类图如下:Originator将内部状态保存到Memento中,memento通过caretaker进行管理。2.备忘录实现将游戏打boss前的状态保存下来,战斗结果不理想时进行恢复。UML类图如下:c++ 代码实现如下:#include<exception>#include <iostream>#include

2020-09-24 11:19:19 88

原创 大话设计模式08-状态模式-2020-9-24

1.状态模式简介状态模式:当一个对象的内在状态允许改变其行为,这个对象看起来好像改变了其类。主要用于一个对象的状态转换很复杂时,即含有大量的if else 语句时,可以将状态判断逻辑转移到表示不同状态的类中。这样要增加新状态变化时,只需要新增子类和修改部分类,不同修改整个判断函数。UML类图如下:2.状态模式实例书写员工一天工作状态类,工作状态状态和工作时长及任务完成情况有关。其类图如下:c++实现的代码如下#include<exception>#include <ios

2020-09-24 10:34:51 116

原创 大话设计模式07-抽象工厂模式-2020-9-22

1.抽象工厂模式简介抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体实现的类。UML类图如下:抽象工厂类对应有多个系列的产品,每个系列都有一个抽象产品父类和多个具体产品子类。定义了一个父类工厂,并且对每一个系列产品都有对个具体的子类工厂,子类工厂中定义了该系列产品的具体创建方法。2.实例定义了两类数据库的操作类,包括sql和access。UML类图如下所示c++代码实现如下#include<exception>#include <iost

2020-09-22 17:02:51 97

原创 大话设计模式06-外观模式-2020-9-22

1.外观模式简介外观模式:为子系统中的一组接口提供一个一致的界面,即定义一个高层接口,使得子系统更容易使用。类图如下:2.实例定义多个股票类,并提供买入卖出函数,定义基金类作为外观类,封装股票类实现。主要类图如下:#include<exception>#include <iostream>#include<string>//六外观模式,定义股票类和基金类class Stock1{public: void buy() { cout <

2020-09-22 15:47:08 68

原创 大话设计模式05-模板方法模式-2020-9-22

1.模板方法模式简介模板方法模式:父类定义一个算法操作的骨架,将一些步骤延迟到子类中实现。这样将不变的行为搬移到父类,去除了子类的重复代码,有利于代码复用。模板方法模式类图如下:2.实例定义一个试卷抄写类,父类试卷类定义了试题,子类重写了答案的实现部分。类图如下所示:c++代码实现如下:#include<exception>#include <iostream>#include<string>using namespace std;class T

2020-09-22 15:28:34 74

空空如也

空空如也

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

TA关注的人

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