多元高斯分布(三)——高斯过程 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中部分的内容进行翻译学习。高斯过程介绍我们在本课程上半部分讨论的许多经典机器学习算法都符合以下模式:给定一组从未知分布中采样的独立同分布的示例训练样本集:求解一个凸优化问题,以确定数据单一的“最佳拟合”模型,并使用这个估计模型对...
多元高斯分布(二)——更多关于多元高斯分布 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中部分的内容进行翻译学习。更多关于多元高斯分布介绍到目前为止的课堂上,多元高斯分布已经出现在许多应用中,比如线性回归的概率解释、高斯判别分析、高斯混合聚类,以及最近学习的因子分析。在本节的笔记中,我们试图揭开多元高斯函数在最近学习的因...
安装GPU版Pytorch注意事项 安装时常用命令:A. cat /proc/driver/nvidia/version #查看当前计算机已安装的cuda驱动版本和gcc版本B. nvcc -V #查看当前计算机已安装的cuda工具包版本C. cat /proc/version #查看Ubuntu系统版本参考资料:A. https://docs.nvidia.com/cuda/cuda-toolkit-releas...
多元高斯分布(一)——基本内容 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。多元高斯分布介绍我们称一个概率密度函数是一个均值为μ∈Rn\mu\in R^nμ∈Rn,协方差矩阵为Σ∈S++n\Sigma\in S_{++}^nΣ∈S++n的1^11一个多元正态分布(或高斯分布...
隐马尔可夫模型 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。隐马尔可夫模型基础摘要我们如何将机器学习应用于随时间变化观察到的一系列数据中来?例如,我们可能对根据一个人讲话的录音来发现他所说的话的顺序感兴趣。或者,我们可能对用词性标记来注释单词序列感兴趣。本小节...
凸优化学习(七)——SVM“1-范数”的软边界 3 SVML1L_1L1范数的软边界为了看到一个更复杂的拉格朗日对偶例子,我们来推导以前课堂上给出的SVML1L_1L1范数的软边界的原对偶问题,以及相应的KKT互补(即,互补松弛)条件。我们有:minw,b,ξ12∥w∥2+C∑i=1mξisubjecttoy(i)(wTx(i)+b)≥1−ξi,i=1,...,mξi≥0,i=1,...,m\begin{aligned}\min_...
凸优化学习(六)——一个简单的对偶实例 2 一个简单的对偶实例作为对偶的一个简单应用,在本节中,我们将展示如何形成一个简单凸优化问题的对偶问题。考虑如下的凸优化问题:minx∈R2x12+x2subjectto2x1+x2≥4x2≥1\begin{aligned}\min_{x\in R^2}\quad &x_1^2+x_2 \\subject\quad to \quad&2x_1+x_2\g...
凸优化学习(五)——拉格朗日对偶 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。1. 拉格朗日对偶一般来说,拉格朗日对偶理论是研究凸优化问题的最优解。正如我们在之前的课上看到的,当最小化一个关于x∈Rnx\in R^nx∈Rn的可微凸函数f(x)f(x)f(x)时,使得解集x∗∈R...
凸优化学习(四)——凸优化问题 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。4 凸优化问题利用凸函数和集合的定义,我们现在可以考虑凸优化问题。 正式的定义为:一个凸优化问题在一个最优化问题中的形式如下:minimizef(x)subjecttox∈Cminimize\qua...
凸优化学习(三)——凸函数 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。3. 凸函数凸优化的一个核心要素是凸函数的概念。定义 3.13.13.1 我们称一个函数f:Rn→Rf:R^n\rightarrow Rf:Rn→R是一个凸函数,需要满足其定义域(记作D(f)\mat...
凸优化学习(二)——凸集 注意,本文内容来自于吴恩达老师cs229课堂笔记的中文翻译项目:https://github.com/Kivy-CN/Stanford-CS-229-CN 中的凸优化部分的内容进行翻译学习。2. 凸集我们从凸集的概念开始研究凸优化问题。定义2.1 我们定义一个集合是凸的,当且仅当任意x,y∈Cx,y\in Cx,y∈C 且 θ∈R,0≤θ≤1\theta\in R, 0\le\theta...
使用Python语言进行机器学习工作流的实例分析 最近,在kaggle上找到一位大牛写的机器学习算法总结,感觉流程清晰,内容详实,因此翻译并分享下,由于作者不明原因将原文删除了,所以没法放上原文地址,文中主要以代码实践的方式展开各种算法,原理方面参考文中的地址连接(这是自己加上的),以便时查阅~目录目录使用Python语言进行机器学习工作流的实例分析1. 介绍2. 机器学习工作流程3 问题定义3.1 问题特征3.2 目标...
非监督特征学习与深度学习(十五)--------长短记忆(Long Short Term Memory,LSTM) 注:本文转载自https://github.com/exacity/simplified-deeplearning/blob/master/%E5%BE%AA%E7%8E%AF%E9%80%92%E5%BD%92%E7%BD%91%E7%BB%9C/LSTM.md 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。LST...
非监督特征学习与深度学习(十四)--------循环神经网络 注:本文转载自https://github.com/exacity/simplified-deeplearning/blob/master/%E5%BE%AA%E7%8E%AF%E9%80%92%E5%BD%92%E7%BD%91%E7%BB%9C/RNN.md 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。循环神经...
非监督特征学习与深度学习(十三)---- 自动编码器 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。自动编码器(Autoencoders)注:本文大量参考旧版 UFLDL 中文翻译。 迄今为止,已经讲了神经网络在有监督学习方面的的应用。在有监督学习中,...
学习pyqt (二)————信号/槽&主次界面&主次线程编程经验总结 今天准备总结一下pyqt编写界面的经验,这样以后遇到同样问题就可以查看并且很快回忆起来!环境搭建经过一周的研究,我发现使用pyqt编写界面最快的方式还是eric + pycharm使用eric6和pycharm同时打开你正在编写的程序,需要界面编写就在eric6里面完成,需要调试并且找到某个变量的类型 时,就在pycharm里面设置断点,然后进行断点调试。主界面绘制经验...
使用Python进行层次聚类(三)——层次聚类簇间自然分割方法和评价方法 簇间自然分割方法今天,主要研究一下层次聚类在进行数据运算的时候,对数据结果进行自然簇分离而需要分析的API————inconsistent() 该函数是计算层次聚类不一致系数的,不一致系数越大,表明使用该阈值进行聚类的偏差越大。这样按照该不一致系数下的阈值进行聚类即相对于其他 情况下的阈值更不适合,因此可以进行自然簇的分离,即取阈值为该不一致系数下小一点即可。解释在这里下面介绍API的...
Statsmodels的学习(二)——Linear Regression Linear Regression基本介绍线性回归,该标签下的函数主要处理线性模型,并且要求这些线性模型具有独立和恒等分布误差或者具有异方差或自相关的误差。 该模块允许用普通最小二乘(OLS)、加权最小二乘(WLS)、广义最小二乘(GLS)和可行的广义最小二乘(p)误差进行估计。数学模型这一类模型假设如下方程:Y=Xβ+μ,其中μ∼N(0,Σ)Y=Xβ+μ,其中μ...
Statsmodels的学习(一)——总述 statsmodels是一个Python模块,它提供对许多不同统计模型估计的类和函数,并且可以进行统计测试和统计数据的探索。 说实话,statsmodels这个词我总是记不住,但是国宝“熊猫”这个单词pandas我还是记得住的,因此每次我打开statsmodels的方式是:百度搜索pandas,然后进入pandas官网点击里面的documentation进入对应标签页面选择下方pand...
凸优化学习(一)——介绍 下面开始学习凸优化凸函数基本定义函数f:Rn→Rf:Rn→Rf:R^n \to R,如果domfdomfdomf是凸集,且对于任意x,y∈domfx,y∈domfx,y \in domf和任意0⩽θ⩽10⩽θ⩽10 \leqslant \theta \leqslant 1,有f(θx+(1−θ)y)≤θf(x)+(1−θ)f(y)f(θx+(1−θ)y)≤θf(x)+(...
使用Python进行层次聚类(二)——scipy中层次聚类的自定义距离度量问题 今天,总结一下如何使用层次聚类算法里面的自定义距离度量层次聚类上次已经总结过。 这次仅仅说明层次聚类的距离参数,这里的距离参数可以使用自定义函数。 我们进入该函数的文档页面 我们看到linkage的说明文档上面的函数scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean', optimal_orderin...
学习pyqt(一)————简单介绍 对于PyQt5的编程,这个网站有一些简单的入门教程,非常不错,比如这个网站。 看完后,感觉使用PyQt5编写界面的程序真的是非常简单,跟我当年 直接用qt编程非常像,果然,以前学习qt的经验对于使用python的 qt模块来说非常有用。但是我感觉仅仅使用代码组合成的界面编程不能令我满足,只有 QML与PyQt5的联合编程才更有意思,于是我就研究了一下如何联合编程,完成了一个简单的QML ...
python异常处理和日志处理 python异常处理和日志处理今天,总结一下最近编程使用的python异常处理和日志处理的感受,其实异常处理是程序编写时非常重要 的一块,但是我一开始学的语言是C++,这门语言中没有强制要求使用try...catch语句,因此我通常 编写代码的时候忽略了这一块,直到开始学习java的时候,发现好多时候编写代码必须加上try...catch 模块,然而我每次都不深入理解,仅仅使用eclip...
使用Python进行数据关联分析 关联分析选择函数包关联分析属于数据挖掘的一大类。我发现的python语言实现的包有两个:pymining:根据Apriori算法进行关联规则挖掘Orange3的关联规则库:根据FP-growth算法进行关联规则挖掘经过分析,我决定使用Oranges进行关联规则的实现,原因如下:FP-growth算法比Apriori算法时间复杂度低Orange3是一整套数据挖掘工具...
使用Seaborn绘图 今天,总结Seaborn画图,其实直接网上搜索Seaborn画图的博客有很多,但是很多都是直接把说明文档罗列一下, 我这里举个例子说明下我使用Seaborn要解决的一个具体问题。 (先列下提纲,以后补充~)问题描述有100样本,每个样本8个属性的数据,如下图:我需要画出这些数据。Seaborn函数的标签与API规律查看Seaborn官网的API,可以看到整个Seab...
xpath使用的相关常用操作 今天准备总结一下前一段编写的爬虫程序,该程序 使用的框架是Scrapy,这里推荐崔庆才的个人博客。 写的非常详细,我按照他的描述,自己完成了爬取Nature官网 里面文章相关信息的程序。关于该框架的使用,崔庆才在博客中已经写得非常清楚了,这里仅仅提供代码中关于xpath使用的相关 常用操作:选取节点下面列出了最有用的路径表达式:表达式描述nodename选取...
Pandas的Apply函数——Pandas中最好用的函数 Pandas最好用的函数Pandas是Python语言中非常好用的一种数据结构包, 包含了许多有用的数据操作方法。而且很多算法相关的库函数的输入数据结构都要求是pandas数据,或者有该数据的接口。仔细看pandas的API说明文档, 就会发现有好多有用的函数,比如非常常用的文件的读写函数就包括如下函数:Format TypeData DescriptionRe...
使用Python进行层次聚类(一)——基本使用+主成分分析绘图观察结果+绘制热图 Python常用数据挖掘的工具包python对于数据处理非常有好的语言,比如常用的scikit-learn和scipy都可以用来进行机器学习和数据挖掘。同时为了使得结果可视化,Python还提供了非常好用的可视化工具包matplotlib和seaborn。使用Python进行层次聚类聚类对于机器学习和数据挖掘来说都是一个非常常用的的工具。其中层次聚类又以其显示效果和可解释效果好而在...
使用机器学习和数据挖掘算法进行数据处理 数据挖掘和机器学习是进行数据处理的非常有用的工具,当代的好多数据都使用这两种方法。但是这两种方法却包含很多模型和方法,对于初学者来说,面对这些模型总是无从下手。因此,后面的论述主要以处理数据的流程入手,把每个方法带入到数据处理的步骤中来讲,使得这些方法在数据处理中的具体位置有一个清晰的显示,有利于理解这些方法。
非监督特征学习与深度学习(十二)---- 卷积神经网络 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(十一)----优化方法:随机梯度下降 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(十)----池化 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(九)----使用卷积进行特征提取 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(八)----神经网络向量化 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(七)----多层神经网络 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(五)----Softmax 回归(Softmax Regression) 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(四)----调试:梯度检查 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(三)----向量化 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(二)----逻辑回归 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
非监督特征学习与深度学习(一)----线性回归 注:本文转载自https://github.com/ysh329/Chinese-UFLDL-Tutorial 因为github上的makedown格式显示的不够完全,看的非常不方便,因此放到CSDN上比较好查阅学习。
机器学习笔记(三)----逻辑回归 分类问题在分类问题中,你要预测的变量 y 是离散的值,我们将学习一种叫做逻辑回归 (Logistic Regression) 的算法,这是目前最流行使用最广泛的一种学习算法。
python学习(八)----numpy模块相关函数 dotNumPy是高性能科学计算和数据分析的基础包numpy的ndarray:一种多维数组对象数组创建函数 函数 说明 array 将输入数据(列表、元祖、数组或其他序列类型)转化为ndarry。要么推断出dtype,要么显示指定dtype。默认直接复制输入数据 asarray 将结构数据转化为ndarray,但是和array的主要区别就是
数据库学习(二)----基本函数 快速入门SELECTSELECT句后面跟的是要查询的字段,可以包括表中的具体字段,函数或表达式 FROM句用来指定数据来源的表 WHERE句用来添加过滤条件,这样讲满足条件的记录查询出来
数据库学习(一)----基本原理 SQL(StructuredQueryLanguage)相当于画一个表格—-先画列,再画行 处于可读性的考虑,一般可以关键字全部大写,非关键字全部小写 (注:后面的例子使用的软件是MySQL/Navicat for MySOL)
servlet和jsp学习(二) 1,http是什么(超文本传输协议)?2.两种请求方式3.servlet中文乱码问题4.常见的错误及处理方式5.如何获得请求参数值?6,servlet如何使用jdbc来访问数据库7,mysql数据库的简单使用
servlet和jsp学习(一) 一、Table对象rows属性描述:返回表格的tr对象组成的集合语法:collection object.rowsrowIndex描述:获取行对象的索引数语法:int object.rowIndexinsertRow()描述:插入行语法:rowElement object.insertRow(index)说明:index为新行的索引值,其编号从0开始。deleteRow()描述:删除行语法:obje
JavaScript学习(五) 一、Table对象rows属性描述:返回表格的tr对象组成的集合语法:collection object.rowsrowIndex描述:获取行对象的索引数语法:int object.rowIndexinsertRow()描述:插入行语法:rowElement object.insertRow(index)说明:index为新行的索引值,其编号从0开始。deleteRow()描述:删除行语法:obje
JavaScript学习(四) 一、HTMLDOM1.什么是HTMLDOM?HTMLDOM提供处理HTML文档的API。2.W3CDOM与HTMLDOM的区别W3CDOM可以处理HTML/XML文档;HTMLDOM仅能处理HTML文档。3.获取对象HTMLElement document.getElementById(string id)4.访问HTML对象的属性object.属性名称 = 值[var 变量名称 = ] objec
JavaScript学习(三) 一、DOM编程1.什么是DOM?DOM[Document Object Model],文档对象模型。DOM提供处理XML/HTML文档的API。DOM的主要操作:节点的获取、节点的动态的创建、创建的删除及节点的替换。节点(Node),在DOM树中所存在的任何一个元素(如HTML元素,文本、属性等)。节点的类型Node.ELEMENT_NODE,1(元素类型) No
JavaScript学习(二) 一、JavaScript的内置对象1.String创建String对象直接量方式 var object = ‘值’; var object = “值”;构造函数方式 var object = new String(“value”);属性 length 描述:获取字符串的长度 语法:int object.length方法 toLowerCase() 描述:转换成小写字母 语法:st
JavaScript学习(一) 一、JavaScript基础1.什么是JavaScript?JavaScript是一种客户端运行的解释性脚本语言。JavaScript是由网景(Netscape)推出的产品。Microsoft推出的JScript。ECMAScript(欧洲计算机制造商协会),2.JavaScript能做什么?完成客户端的交互工作(如表单的验证、焦点广告、菜单效果等)。3.JavaScript的使用方式3.1 使用外
C语言关于可变参数函数的例子 #include <stdio.h>#include <stdarg.h>int max(int cnt, ...){ va_list v;//v保存可变长参数表,va_list是个类型 va_start(v,cnt);//用v保存参数cnt之后的那些参数 int i; int maxvalue = va_arg(v, int);//从参数表中取出一个int类型
使用QTcpSocket接收数据 最近,接到一个项目,是连接TCP后读取一个图片的数据,对方为了简化,直接发送数据的二进制格式,因此我必须连接后直接读取,然后在读取完成后进行保存。因为数据没有在开头加入大小信息,而TCP传输的时候并没有一次全部传输完成,只是默认传输一定量的数据,因此我必须时刻检验数据是否全部读取完毕,然后显示图片。最后,我没有想明白如何控制读取内容一次全部读取完成,只能使用笨办法,每次读取一段数据就将数据加入所有数
递归算法的时间复杂度分析 这一段时间,我研究了一下算法的时间复杂度分析,感觉其中的递归分析挺有意思,就总结一下记录下来,以备以后随时复习查看。下面假设递归方程式已经给出了,仅仅说明如何计算递归方程的时间复杂度。
Qt设置风格表单 最近编程的时候,我发现了,对于Qt来说,最简单的界面实现方法就是使用setStyleSheet函数!这个函数可以用描述性语言让界面变得漂亮!比如我想要在一个QTabWidget里面的一个标签里面的按钮按照我自己想要的方式显示,就可以使用下面的代码(假设一个tab我起的名字是tab_IO_configuration):ui->tab_IO_configuration->setStyleSheet("Q
QMessageBox的常用方法用总结 普通用法QMessageBox是在编程中非常常用的一个类,特别是我们需要要几个小小的提示而又不需要太多的逻辑的对话框。这时,最简单的用法就是直接使用QMessageBox的静态方法生成对话框,对于一般只需要简单提示的情况下这样就够用了,举个例子:QMessageBox::information(this, tr("提示信息"), tr("与控制器异常连接"), QMessageBox::NoButt
数字/模拟输入输出相关的传感器 总结一下最近学到的东西:数字输入相关的元件光纤传感器:当反射物体的反射光强变化时,出现一个DI信号,比如海绵上料的地方。 漫反射传感器:灵敏度低于光纤传感器,当物体接近时,出现一个DI信号,比如抓取隔音棉的爪子上面。磁开:安装在气缸的夹缝处,当控制气缸的活塞上磁铁接近时会出现一个DI信号。比如控制气爪张开和缩回的地方。接近传感器:当磁力物件接近时,出现一个DI信号。比如检查气缸是否升起的地方。对射
设计模式学习(二十八)————访问者模式 访问者模式:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。我们使用男人和女人在成功和失败时的不同表现举例子:#ifndef PERSONSTATE#define PERSONSTATE#include <QtDebug>#include <QString>#include <QList>class Man;class Woman;
设计模式学习(二十七)————解释器模式 解释器模式:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子当一个语言需要解释执行,并且你可将该语言的句子表示为一个抽象语法树时,可使用解释器模式使用音乐解释为汉字的例子:#ifndef PLAYCONTEXT_H#define PLAYCONTEXT_H#include <QString>#include <QDebug>class PlayCon
设计模式学习(二十六)————享元模式 享元模式:运用共享技术有效地支持大量细粒度的对象我们以网站共享为例子:#ifndef WEBSITE_H#define WEBSITE_H#include <QString>#include <QDebug>#include <QMap>#include <QSharedPointer>class User{public: User(QString name):_name(nam
《Effect C++》学习------条款29:为“异常安全”而努力是值得的 先举书上的例子:void PrettyMenu::changeBackground(std::istream& imgSrc){ lock(&mutex); delete bgImage; ++ imageChanges; bgImage = new Image(imgSrc); unlock(&mutex);}这段代码大致的意思就是改变背景图片,删掉旧的
设计模式学习(二十五)————中介者模式 中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互注意:中介者模式很容易在系统中应用,也很容易在系统中误用。当系统出现“多对多”交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是不是合理。下面以联合国处理美国和伊拉克问题作为例子:#ifndef UNITEDNATIONS#define UN
设计模式学习(二十四)————职责链模式 职责连模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止就拿雇员向领导提出请假和加薪的要求,不同的领导的权限不一样来向上级请示为例子:#ifndef MANAGER_H#define MANAGER_H#include <QString>#include <QSharedPointer>#inclu
设计模式学习(二十三)————命令模式 命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作就拿在烧烤店吃小吃作为例子,把服务员作为传递指令的对象:#ifndef COMMAND_H#define COMMAND_H#include <QDebug>class Barbecuer{public: void BakeMutton() {
设计模式学习(二十二)————桥接模式 桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化今天使用不同品牌的手机和在其上面安装不同的应用举例子:#ifndef MOBILE_H#define MOBILE_H#include <QDebug>class HandsetSoft //手机软件抽象类{public: virtual void Run() = 0; virtual ~HandsetSoft(
设计模式学习(二十一)————合成/聚合复用原则 合成/聚合复用原则,尽量使用合成/聚合,尽量不要使用类继承合成和聚合都是关联的特殊种类 聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分 合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样 比如:大雁有两个翅膀,翅膀与大雁就是部分和整体的关系,并且它们的生命周期是相同的,于是大雁和翅膀就是合成关系 而大雁是群居动物,所以
设计模式学习(二十)————单例模式 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象一个最好的办法就是,让类自身负责保护它的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法注意:使用单例模式,只能保证一个线程内对象不会被多次创建,而不不能保证多线程的情况。因此,需要考虑多线程的话,就要用锁这里我们使用一个单例类作为
设计模式学习(十九)————迭代器模式 迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表表示迭代器模式是为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一的接口这里使用在公交车上让乘客买票作为例子:#ifndef ITERATOR_H#define ITERATOR_H#include <QSharedPointer>#include <QList>class Aggregate;c
设计模式学习(十八)————组合模式 组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性这里使用公司总部和分公司来举例:#ifndef COMPANY_H#define COMPANY_H#include <QString>#include <QDebug>#include <QList>class Company //公司类,抽象接口{public: