配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
1. 工厂模式的特点在海贼王中,作为原王下七武海之一的多弗朗明哥,可以说是新世界最大的流氓头子,拥有无上的权利和无尽的财富。他既是德雷斯罗萨国王又是地下世界的中介,控制着世界各地的诸多产业,人造恶魔果实工厂就是其中之一。
人造恶魔果实的最大买家是四皇之一的凯多,凯多其实很明智,他没有自己去生产,可能有这么几个因素:
凯多手下没有像凯撒·库朗一样的科学家,无法掌握生产人造恶魔果实这种顶级的科学技术【意味着构造一个对象有时候需要经历一个非常复杂的操作流程,既然麻烦那索性就不干了】。
有需求下单就行,只需关心结果,无需关心过程【实现了解耦合】。
人造恶魔果实出了问题,自己无责任,售后直接找明哥【便于维护】。
在我们现实生活中也是一样,买馒头和自己蒸馒头、去饭店点一份大盘鸡和自己养鸡,杀鸡,做大盘鸡,这是全然不同的两种体验:
自己做麻烦,而且有失败的风险,需要自己承担后果。
买现成的,可以忽略制作细节,方便快捷并且无风险,得到的肯定是美味的食物。
对于后者 ...
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
我们在进行程序设计的时候,要尽可能地保证程序的可扩展性、可维护性和可读性,所以需要使用一些设计模式,这些设计模式都遵循了以下三个原则,下面来依次为大家介绍。
单一职责原则C++面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类,所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。
设计模式中所谓的单一职责原则,就是对一个类而言,应该仅有一个引起它变化的原因,其实就是将这个类所承担的职责单一化(就跟海贼王中的能力者一样,每个人只能吃一颗恶魔果实,拥有某一种能力【黑胡子这个Bug除外】)。
如果一个类承担的职责过多,就等于把这些职责耦合到了一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致设计变得脆弱,当变化发生时,设计会遭受到意想不到的破坏。
偷袭白胡子的这个男人被白胡子视为自己的儿子,他叫斯库亚德,本来是一起去救艾斯的【此时的他是一个单一职责的类】,后来被赤犬挑拨离间想到了自己的过去,并萌生了别的想 ...
配套视频课程已更新完毕,大家可通过以下两种方式观看视频讲解:
关注公众号:爱编程的大丙,或者进入大丙课堂学习。
面向对象设计主要就是使用UML的类图,类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。下面基于C++这门语言给大家讲一下UML类图的画法。
类的UML画法类(class / struct)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。在系统中,每个类都具有一定的职责,职责指的是类要完成什么样子的功能,要承担什么样子的义务。一个类可以有多种职责,但是设计得好的类一般只有一种职责。
比如,我现在定义了猎人类:
1234567891011121314151617181920212223242526272829303132333435363738394041class Hunter{public: int m_age = 32; static int m_times; string getN ...
数据库连接池概述我们在进行数据库操作的时候为了提高数据库(关系型数据库)的访问瓶颈,除了在服务器端增加缓存服务器(例如redis)缓存常用的数据之外,还可以增加连接池,来提高数据库服务器的访问效率。
一般来说,对于数据库操作都是在访问数据库的时候创建连接,访问完毕断开连接。但是如果在高并发情况下,有些需要频繁处理的操作就会消耗很多的资源和时间,比如:
建立通信连接的TCP三次握手
数据库服务器的连接认证
数据库服务器关闭连接时的资源回收
断开通信连接的TCP四次挥手
如果使用数据库连接池会减少这一部分的性能损耗。
接下来会基于MySql数据库(使用MySQL的API连接MySQL数据库)为大家讲解一下,如何使用C++11的相关新特性来实现一个数据库连接池。
涉及的技术点
C++11 新特性
多线程编程
线程同步(互斥锁的使用)
处理时间和日期的 chrono 库
条件变量
智能指针
lambda 表达式
使用 =delete 删除函数
其它知识点
MySQL 数据库编程,主要是官方 API 的封装和使用
MySQL API 详解
单例模式
STL容器
生产 ...
连接数据库的步骤众所周知,MySQL数据库是一个典型的C/S结构,即:客户端和服务器端。如果我们部署好了MySQL服务器,想要在客户端访问服务器端的数据,在编写程序的时候就可以通过官方提供的C语言的API来实现。
在程序中连接MySql服务器,主要分为已经几个步骤:
初始化连接环境
连接mysql的服务器,需要提供如下连接数据:
服务器的IP地址
服务器监听的端口(默认端口是3306)
连接服务器使用的用户名(默认是 root),和这个用户对应的密码
要操作的数据库的名字
连接已经建立, 后续操作就是对数据库数据的添删查改
这些操作都是需要通过sql语句来完成的
数据查询:通过调用api 执行一个查询的sql语句
数据修改(添加/删除/更新):通过调用api 执行一个修改数据的sql语句
如果要进行数据 添加/ 删除/ 更新,需要进行事务的处理
需要对执行的结果进行判断
成功:提交事务
失败:数据回滚
数据库的读操作 -> 查询 -> 得到结果集
遍历结果集 -> 得到了要查询的数据 ...
1. 数组所谓数组,就是将多个元素(通常是同一类型)按一定顺序排列放到一个集合中,那么这个集合我们就称之为数组。
数组是一个有序的列表,可以在数组中存放任意的数据,并且数组的长度可以动态的调整。
通过数组字面量创建数组
1234567891011// 创建一个空数组var arr1 = []; // 创建一个包含3个数值的数组,多个数组项以逗号隔开var arr2 = [1, 3, 4]; // 创建一个包含2个字符串的数组var arr3 = ['a', 'c']; // 可以通过数组的length属性获取数组的长度console.log(arr3.length);// 可以设置length属性改变数组中元素的个数arr3.length = 0;
1.1 获取数组元素数组的取值
123456// 格式:数组名[下标] 下标又称索引// 功能:获取数组对应下标的那个值,如果下标不存在,则返回undefined。var arr = ['red', 'green', 'blue'];arr ...
1. 运算符1.1 算术运算符Javascript中支持的算术运算符有五种,分别为:
+:加号
-:减号
*:乘号
/:除号
%:取余
1.2 一元运算符一元运算符:只有一个操作数的运算符。
前置 ++ / - -
前置++:先加1,后参与运算
前置- - :先减1,后参与运算
后置 ++ / - -
后置++:先参与运算,后加1
后置- - :先参与运算,后减1
12345var iNum1 = 10;var iNum2 = 20;var iNum3 = --iNum1 + --iNum2; // 9 + 19 等于 28var iNum4 = iNum1-- + iNum2--; // 9 + 19 等于 28var iNum5 = iNum1 + iNum2; // 8 + 18 等于 26
1.3 逻辑运算符逻辑运算符又叫布尔运算符,逻辑运算符参与的表达式返回一个布尔类型的值。Javascript中的逻辑运算符和C/C++中的逻辑运算符是一样的。
&&:逻辑与,两个操作数同时为true,结果为 ...
1. JavaScript 概述JavaScript是一种运行在客户端 的脚本语言(不需要编译,直接执行)。JavaScript的解释器被称为JavaScript引擎,为浏览器的一部分,是广泛用于客户端的脚本语言,它一般是在HTML网页上使用,用来给HTML网页增加动态功能。
JavaScript和HTML、CSS的区别
HTML:提供网页的结构,提供网页中的内容
CSS: 用来美化网页
JavaScript: 可以用来控制网页内容,给网页增加动态的效果
JavaScript 分三个部分
ECMAScript
JavaScript的核心,描述了语言的基本语法和数据类型,ECMAScript是一套标准,定义了一种语言的标准与语法规范。
DOM---Document Object Model 文档对象模型
一套操作页面元素的API,DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作。
BOM---Browser Object Model 浏览器对象模型
一套操作浏览器功能的API,通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳 ...
很多人不了解Qt Quick和Qml,还有很多人对其存在偏见。这篇文章就是来向这些有困惑的人介绍一下其是什么,有什么特点。
首先,这两个是一个东西吗?答案:是的。但是,具体来说,Qt Quick是框架,qml是语言。Qt Quick是用C++搭建起来的一套DirectUI/Immediate UI框架,在这个框架上可以用和js语法一样的qml语言开发界面。
和原来的QWidgets框架有什么关系吗?答案是没有。这个估计让很多人失望,我一开始也是以为Qt Quick就是QWidgets的演进版,只不过用js替代了原有的ui.xml文件。实际上,Qt Quick是一个新框架,它仅仅继承了QT原有的元对象系统,也就带信号槽的对象系统,其他的理念都是新的。了解DirectUI的同学肯定知道DirectUI和经典的GUI库,如MFC、WTL的区别。DirectUI把所有控件都在一个主窗口的绘制事件里绘制,从硬件原理上说就是界面是统一刷新的,而不是根据事件选择部分区域刷新。这样的好处是这些控件容易协作变化,特别适合制作动态界面,例如控件拖拽、变形、变色、皮肤、透明、3D等等。
为什么要引 ...
在前面的文章中为大家介绍了C语言中如何使用cjson处理json数据,接下来讲一下json在C++中的处理,这里给大家介绍一个开源的库jsoncpp。
1. 下载和编译1.1 下载下载 jsoncppJsoncpp是个跨平台的C++开源库,提供的类为我们提供了很便捷的操作,而且使用的人也很多。在使用之前我们首先要从github仓库下载源码,地址如下:
1https://github.com/open-source-parsers/jsoncpp
下载 cmake 工具由于C++程序猿都是基于VS进行项目开发,下载的源码我们一般不会直接使用,而且将其编译成相应的库文件(动态库或者静态库),这样不论是从使用或者部署的角度来说,操作起来都会更方便一些。
但是,从github下载的源码不能直接通过VS打开,编译就更谈不上了。它提供的默认编译方式是cmake。我们可以通过使用cmake工具将下载的jsoncpp源码生成一个VS项目,这样就可以通过VS编译出需要的库文件了。
CMake工具的官方下载地址如下:
1https://cmake.org/download/
在这最新的安装包,根据 ...