冯Jungle
C++开发者
展开
-
C++设计模式系列文章汇总
Jungle整理的C++设计模式系列文章出炉了,每一种设计模式都包含:理论知识:每一种模式的定义、解释 模式UML结构和角色分析:UML类图说明模式的角色和结构 模式应用实例:将设计模式应用于具体的例子,并给出UML实例类图 完整的源代码:完整的代码和运行结果示意图,源代码资源及UML图可在Git上下载 总结:每一种模式的特点和适用环境设计模式准备工作设计模式(一)——设计...原创 2019-11-12 22:12:35 · 7746 阅读 · 4 评论 -
设计模式——设计模式概述
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式主要是为了解决某类重复出现的问题而出现的一套成功或有效的解决方案。设计模式提供一种讨论软件设计的公共语言,使得熟练设计者的设计经验可以被初学者和其他设计者掌握。设计模式还为软件重构提供了目标。1.设计模式由来软件设计模式源自于建筑学。积淀了几千年的建筑学工...原创 2019-10-12 21:04:29 · 22642 阅读 · 9 评论 -
设计模式(二)——UML类图介绍
在正式介绍设计模式之前,我们有必要学习一下UML类图,因为我们需要一种直观的表示方法来描述设计模式,这种方法即是UML类图。在Jungle之前的一篇博客里,已经介绍到UML类图UML类图关系与符号简介。这里,不妨我们再次学习一遍。1.UML是什么?UML-Unified Model Language统一建模语言,是在开发阶段,说明、可视化、构建和书写一个面向对象软件的开放方法。统一建模语...原创 2019-10-16 00:08:03 · 19462 阅读 · 5 评论 -
设计模式(三)——面向对象设计原则
设计模式需要遵循基本的软件设计原则。可维护性(Maintainability)和可复用性(Reusability)是衡量软件质量的重要的两个属性:可维护性:软件能够被理解、改正、适应及扩展的难易程度 可复用性:软件能够被复用的难易程度面向对象设计的原则是支持可维护性复用,一方面需要实现设计方案或代码的复用,另一方面要保证系统易于扩展和修改,具有良好的可维护性。面向对象设计原则蕴含在各个设计...原创 2019-10-16 22:32:17 · 10578 阅读 · 5 评论 -
再不学简单工厂模式,就真的要去工厂搬砖啦~
设计模式系列文章:设计模式——设计模式概述设计模式(二)——UML类图介绍设计模式(三)——面向对象设计原则源码和资料地址:https://github.com/FengJungle/DesignPattern从本文开始,Jungle将开始一一整理介绍23种设计模式。1.简单工厂模式简介创建型模式关注对象的创建过程,在软件开发中应用非常广泛。创建型模式描述如何将对象的创...原创 2019-10-17 22:11:13 · 17034 阅读 · 23 评论 -
不知道工厂方法模式?你可能真的应该去工厂~
设计模式系列文章:设计模式——设计模式概述设计模式(二)——UML类图介绍设计模式(三)——面向对象设计原则设计模式(四)——简单工厂模式源码和资料地址:https://github.com/FengJungle/DesignPattern在介绍简单工厂方法模式时Jungle总结出简单工厂模式存在最大的问题是违背了“开闭原则”,每当增加新的产品时,需要修改工厂类的逻辑。为了...原创 2019-10-18 07:32:09 · 11808 阅读 · 16 评论 -
工厂搬砖也要带脑壳 ~ Jungle学抽象工厂模式
回顾之前的设计模式,简单工厂模式所有逻辑都封装在工厂类中,工厂根据客户提供的产品名字创建对应产品的对象实例;工厂方法模式将产品的创建过程放到了具体工厂类中,每一个工厂可以创建一个具体产品,由此可能会创建许多工厂类。很多时候,一个工厂不只是生产一种产品,而是生产一类产品,比如一个体育用品工厂,可以生产篮球、足球、排球等多种产品。此时我们可以把这些相关的产品归纳为一个“产品族”,由同一个工厂来生产,这...原创 2019-10-19 09:28:41 · 9346 阅读 · 4 评论 -
建一栋房子总共分几步?建造者模式告诉你答案~
“把大象装冰箱,总共分几步?”“三步。第一步,打开冰箱门;第二步,把大象装进冰箱;第三步,把冰箱门关上。”Jungle活了这20多年,全靠这个笑话活着! 把大象装冰箱竟然只需要三步?那到底是怎么把大象装进冰箱呢?你问我,我问谁?再说,我也不关心这个呀!这……来点实际的吧,如果Jungle要建一栋房子,总共分几步?本文的建造者模式将声情并茂地向您娓娓道来……1.建造者模式简介建造...原创 2019-10-19 15:47:43 · 9737 阅读 · 17 评论 -
克隆以后我就成了你——探究原型模式
孙悟空拔一根毫毛就可以变出好多一模一样的孙悟空!!!中国的克隆技术其实是世界领先的!即便Jungle读书少,Jungle也清晰地记得中学生物课本上提到过的克隆羊“多利”。虽然多利寿命不长,但它的出现对“克隆(Clone)”技术意义重大。克隆,直观说就是从原有生物体上取体细胞,然后无性繁殖出有完全相同基因的个体或种群。这么说来中国的克隆技术其实是世界领先的,因为孙悟空拔一根毫毛变出许多一模一...原创 2019-10-19 22:32:00 · 6503 阅读 · 20 评论 -
“天上天下,唯我独尊”——单例模式
你能在电脑上调出两个Windows任务管理器吗?假设能,如果两个管理器显示的数据相同,那何必要存在两个呢?如果两个管理器显示的数据不同,那我该相信哪一个呢?试试看,应该有且仅有一个吧?一个系统里有且仅有一个Windows任务管理器实例供外界访问 。如何保证系统里有且仅有一个实例对象呢?并且能够供外界访问?你可以在系统里定义一个统一的全局变量,但这并不能防止创建多个对象(想一想,为什...原创 2019-10-20 18:46:58 · 11026 阅读 · 13 评论 -
代码还可以这么复用——适配器模式
你一定听过“网络适配器”吧?又叫网卡。它的作用是什么呢?——上网!这样的回答显然不够专业,正确的答案是“网卡的一个重要功能就是要进行串行/并行转换。因为网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行,而网卡和计算机之间通信则是通过计算机主板上的I/O总线以并行传输方式进行。”你肯定要问:“这和我有什么关系?”当然有了,因为你正在学习设计模式,而这就跟本文即将要介绍的适配器...原创 2019-10-22 08:22:36 · 7001 阅读 · 11 评论 -
号称最难理解的设计模式,只需看这篇解析——桥接模式
Jungle有两个手机,分别是M手机和N手机,M手机上有游戏Game1,N手机上有Game2。每次Jungle想玩Game1时,就使用M手机,想玩Game2时,就玩N手机。要是某天Jungle外出,心情大好,两个游戏都想玩,那Jungle还得带上两个手机???麻不麻烦?如果新出一个游戏Game3,那Jungle是不是要再买一个手机呢?同样都是游戏软件,为什么不把所有游戏都装到一个手机上呢...原创 2019-10-23 22:17:41 · 5970 阅读 · 7 评论 -
逆袭成为主管和高级经理——组合模式
今天Jungle又是被压榨的一天:同事让帮忙做个测试,一测就是一上午;主管叫去开会,尽管他是三级主管,但也是Jungle的主管呀!更磨人的在后头:Jungle由于项目需要,要申请某个IT权限,需要三级主管、二级主管、成都区总经理层层批复……这公司哟,简直就像一棵树,Jungle只是一片绿叶,绿叶前面有树枝,树枝前面还有树枝,直到树的躯干……Jungle何时才能成为大树枝呢?这一...原创 2019-10-24 08:31:34 · 6151 阅读 · 3 评论 -
人靠衣装,美靠靓装——装饰模式,教你成为最靓的仔~
成都的气温说降就降啊!还没立冬呢,温度骤然下降,只有10度了。扛不住了,Jungle要穿一件毛衣!额,出门还是很冷!那再带个围巾!天,上半身不冷了,下半身还那么冷~~~穿上秋裤!出门前想了想,这种天气骑摩拜单车一定吹着手冷,于是Jungle又带上了手套……看到了吗,天冷了,Jungle想加什么衣裤即加什么衣裤,各种装饰让Jungle不再感到寒冷。不过,不管Jungle穿再多衣服,...原创 2019-10-25 00:00:06 · 5184 阅读 · 7 评论 -
如何吃到回锅肉?找厨师啊——外观模式实例解析
好不容易盼到周末啦!Jungle想吃点好的犒劳自己!吃什么呢?回锅肉!是的,吃回锅肉!可是这过程好麻烦啊,先得去市场里买肉,买回来得洗好,然后切好,再炒肉,最后才能吃上!不仅过程繁杂,而且Jungle还得跟市场、厨房打交道,想想都头大。如果有个厨师就好了,Jungle直接告诉厨师“我要吃回锅肉”,20分钟后厨师直接端上来就开吃。而中间那些买肉洗肉切肉的过程Jungle统统不关心了,而且J...原创 2019-10-26 15:42:35 · 3710 阅读 · 3 评论 -
细粒度对象的大面积复用~——实例分析享元模式
知道围棋吗?不会下围棋那总见过吧?四四方方的棋盘上,白色棋子和黑色棋子分布在棋盘的各个位置上。棋子与棋子之间的区别是什么?除了颜色和位置,好像没什么不同了吧!也就是说,每个棋子对象的大部分状态都是一样的(形状、材料、质地等)。如果我们要设计一个程序来实现下围棋的功能,该如何来创建或者表示这上百个棋子对象呢?类似的,你想输入一段英文段落,无论每个单词再长再复杂,也无非都是由26个字母...原创 2019-10-27 15:56:32 · 3778 阅读 · 4 评论 -
双十一天猫购物找代理?先学会代理模式
“代理”这个词不陌生吧?买化妆品、买奶粉、买包包,都可以通过代理代购,甚至有专门的代购网站;或者要购置一些自己不太清楚原理好坏的物品,可以找相关代理负责帮忙购买,当然了,得支付一定费用。在软件设计模式中,也有一种模式可以提供与代购网站类似的功能。当客户端不能或者不便直接访问一个对象时,可以通过一个称为“代理”的第三方来间接访问,这样的设计模式称为代理模式。1.代理模式简介代...原创 2019-10-28 08:09:36 · 4468 阅读 · 4 评论 -
“欲戴王冠,必承其重”——深度解析职责链模式
应项目需求,公司安排Jungle去成都出差一段时间。这不,Jungle刚结束出差生活,回到公司准备报销。算了一下,Jungle一共有大概50万的一笔小额票据需要报销。按照公司规定,Jungle得先去找自己的组长签字。组长一看,“啧啧啧,我只能处理10万金额以下的报销,你这单子我签个字,你还得找兵哥(主管)签字”,于是Jungle又跑去找兵哥。兵哥看了,“啧啧啧,我最多只能管金额不超过30...原创 2019-10-29 08:28:46 · 3892 阅读 · 2 评论 -
作为程序员的你,必须要知道命令模式~
还记得Jungle曾经设计的Qt图片浏览器吗?鼠标点击“上一张”,浏览上一张图片;点击“下一张”,浏览下一张图片;点击“自动播放”,则自动从上到下播放每一张图片。是不是很有趣的一个小程序?鼠标点击某个键,就好像用户在向图片浏览器发送指令,图片浏览器内部接收到指令后开始调用相应的函数,最终结果是播放上一张或下一张图片,即执行或响应了用户发出的命令。客户并不知道发出的命令是什么形式,也不知道图...原创 2019-10-30 08:15:11 · 4262 阅读 · 2 评论 -
读懂老板的暗语,你需要知道解释器模式~
看过《大明王朝1566》吗?这是Jungle所看过的历史剧当中最最喜欢和推崇的一部剧。看过这部剧的小伙伴们都知道,嘉靖皇帝说话从来不会明明白白说出来,而是喜欢绕着说,或者说暗语,若不细细揣测,根本不知道嘉靖说的真实含义是什么。比如他跟陈洪说“行到水穷处,坐看云起时”,陈洪就意会到皇上是让他除草;太子喜获儿子,嘉靖给了枣和栗……要是Jungle生活在那时候,脑壳真得变大啊,整天揣测皇帝的意图都够了...原创 2019-11-02 22:30:50 · 3038 阅读 · 1 评论 -
迭代器模式,给你更高大上的遍历体验~
写代码不少使用数组或者类似的集合对象吧?每次要遍历一遍数组怎么办?For 循环!或者while循环,一个一个访问每个位置的元素,直到数组末尾。STL里面甚至有专门的迭代器,针对具体的集合类对象,有对应使用的迭代器。STL的迭代器提供了丰富的遍历方法,如访问集合对象的首位元素、末位元素、指定位置的元素、下一个元素……怎么样,是不是感觉有了迭代器,遍历方法不再是难事了?1.迭代器模式概述...原创 2019-11-03 14:16:14 · 3545 阅读 · 2 评论 -
中介者模式,说一说贝壳找房
离开学校参加工作之前,你一定是有一段时间是在找租,Jungle也是如此。Jungle为了找到合适的房子,沿着地铁线一个小区一个小区的去问门卫问保安,或者照着小区门口展板上的房东的联系方式去找房东……此事已经过去大半年了,但Jungle现在想来还是觉得很麻烦!麻烦在哪里?得亲自走亲自联系各个房东,通信录和微信得加好多房东……其实有更省事的办法,那就是找中介,租房中介哪儿都是。虽然贵(...原创 2019-11-04 07:45:26 · 4401 阅读 · 1 评论 -
我用备忘录模式设计了简易的版本控制系统
“Ctrl+Z”是什么操作?各位都用过,并且经常使用吧?撤销!撤销上一个操作返回上一个状态,甚至撤销好几个操作,返回到几个操作之前的状态。这个操作非常有用,一旦我们某一步操作失误,可以选择撤销操作来返回原来的无错状态。那么系统怎么知道每一步的状态呢?它一定保存了一定数量的历史状态!就像Git版本控制一样,保存着每一次提交的状态,使用者可以随时reset到历史某个状态,就像一个备忘录一样,保存...原创 2019-11-05 22:45:58 · 7685 阅读 · 1 评论 -
“牵一发而动全身”——我用观察者模式简单模拟吃鸡
每当Jungle公众号【Jungle笔记】更新发布了文章,作为Jungle的关注者,你会第一时间接到消息,(如果)然后就可以去查看、点赞、评论和转发,接下来的一天你都高高兴兴;每当Jungle更新了CSDN博客,作为Jungle的支持者,你也会在打开CSDN网站的时候看到消息,(如果)然后你就可以去查看、点赞、评论和转发,接下来的一周你都高高兴兴。也就是说,“Jungle更新发布文章”...原创 2019-11-06 21:35:22 · 6360 阅读 · 11 评论 -
状态模式——从斗地主开始说起
“人有悲欢离合,月有阴晴圆缺”。很多事物在特定条件下转换成不同的状态,在不同状态下表现出不同的行为。在软件系统中,有些对象在不同的条件下也具有不同的状态,不同状态之间可以相互转换。通过判断不同的条件分支(if...else...或者switch..case...)可以进行状态的转换。但这样势必使得代码的判断逻辑变得复杂,降低系统的可维护性。如果新加入一种状态,还需要修改判断逻辑,不符合...原创 2019-11-09 10:40:05 · 3691 阅读 · 4 评论 -
如何管理和维护算法族?只需知道策略模式
同样是排序算法,你可以选择冒泡排序、选择排序、插入排序、快速排序等等,也即是说,为了实现排序这一个目的,有很多种算法可以选择。这些不同的排序算法构成了一个算法族,你可以在需要的时候,根据需求或者条件限制(内存、复杂度等)适时选择具体的算法。在面向对象的设计里,该如何设计这样一个算法族呢?它包含了多种算法,在使用的时候又会根据条件来选择具体的算法?这就会用到软件设计模式中的——策略模式。...原创 2019-11-09 21:23:22 · 4249 阅读 · 1 评论 -
不知不觉就在使用的一种设计模式——模板方法模式
类的继承你一定用过,派生类覆写基类的方法你也一定用过,只是你可能不知道,这就是传说中的一种设计模式……1.模板方法模式简介模板方法模式是较简单且常用的一种设计模式,是基于类的继承的一种代码复用技术,其结构只存在基类和派生类之间的继承关系。模板方法是一个具体的方法,给出了一个顶层逻辑流程框架。模板方法模式:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。模板方法模式使...原创 2019-11-10 10:48:34 · 3625 阅读 · 9 评论 -
访问者模式,从双十一购物开始说起
欧耶!这周Jungle的作业终于做完了!作业是什么呢?就是完成一个习题册。Jungle做完之后,得让家长检查习题册并签字;第二天交到学校,组长得初步检查作业是否做完、家长是否签字,然后老师会评阅作业是否正确,并给出评分。就是这么一个习题册,这是经了多少人的手啊! Jungle——完成习题册上的题; Jungle家长——检查儿子的作业,并在习...原创 2019-11-10 22:57:49 · 3609 阅读 · 5 评论 -
设计模式那么多!面试官会怎么问?
Jungle花了几个月的时间整理出了《C++设计模式系列》,将源码放到了Github上,并且自从这一系列博客发布至今,陆续在修复bug、完善代码和说明文档。当然,文章还存在很多不足,Jungle也将持续完善。C++设计模式系列文章汇总_冯Jungle的个人博客-CSDN博客Jungle整理的C++设计模式系列文章出炉了,每一种设计模式都包含:理论知识:每一种模式的定义、解释模式UML结构和角色分析:UML类图说明模式的角色和结构模式应用实例:将设计模式应用于具体的例子,并给出UML实例类图完整的源代码...原创 2021-09-29 23:40:30 · 2255 阅读 · 0 评论 -
划重点:面试中单例模式的考点!(C++版本)
在Jungle的上一篇文章《设计模式那么多!面试官会怎么问》中,总结了在面试过程中经常考察的设计模式及相关考点。文中提到,单例模式几乎是必考点。这并不是危言耸听或者夸大其词。面试中“设计模式三剑客”(单例模式、工厂模式和观察者模式)里单例模式首当其冲!(用词不当?)设计模式那么多!面试官会怎么问?https://blog.csdn.net/sinat_21107433/article/details/1205573731. 单例模式的概念单例模式:确保一个类只有一个实例,并提供一个全局访问点.原创 2021-10-06 08:45:00 · 1562 阅读 · 0 评论 -
new也可以创建对象,为什么需要工厂模式?
设计模式里,工厂模式是一类创建型的设计模式。为遵循软件设计和开发的开闭原则,先后衍生出了简单工厂模式,工厂方法模式和抽象工厂模式。在这几篇文章里分别用UML图和实例展示了各种工厂模式的特点和适用场景。再不学简单工厂模式,就真的要去工厂搬砖啦!https://blog.csdn.net/sinat_21107433/article/details/102598181不知道工厂方法模式?你可能真的应该去工厂!https://blog.csdn.net/sinat_21107433/article/det原创 2021-10-16 11:44:50 · 2252 阅读 · 0 评论 -
Qt中的设计模式
Qt中有很多设计模式的身影。本文简单介绍3种,分别是单例模式、观察者模式和适配器模式。单例模式如下代码,通过宏aApp返回instance。可以看到,类QCoreApplication的构造函数是private。#define qApp QCoreApplication::instance()class Q_CORE_EXPORT QCoreApplication#ifndef QT_NO_QOBJECT : public QObject#endif{#ifndef Q..原创 2021-10-24 19:04:28 · 6370 阅读 · 0 评论 -
隐藏实现又解耦,认识认识PImpl模式
1. PImpl模式简介PImpl,Pointer to Implementation,指向实现的指针。这是C++中一种常用的模式。严格说来,局限于指针形式,PImpl并不是一种设计模式。PImpl通过一个私有的成员指针,将指针指向的类的内部实现全部隐藏。如下图所示:其中,头文件中需要对PImpl作前向声明,并保存一个私有的PImpl指针。在构造函数中初始化这个指针,在析构函数中释放该指针。当然,也可以使用智能指针。在类A对外暴露的接口的实现中,比如A::getName()...原创 2022-02-26 16:07:21 · 1297 阅读 · 0 评论 -
啊,如何遵循“低耦合”设计原则?
1. 引言类的设计需要遵循“高内聚、低耦合”的设计原则(或者说“高内聚、松耦合”)。在之前的文章里介绍过什么是高内聚和低耦合(设计模式(三)——面向对象设计原则)高内聚:内聚是对软件系统中元素职责相关性和集中度的度量。如果元素具有高度相关的职责,除了这些职责内的任务,没有其它过多的工作,那么该元素就具有高内聚性;反之则成为低内聚性。低耦合:耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据某种程度上理解,高内聚低耦合原创 2022-02-27 11:46:06 · 1125 阅读 · 1 评论