<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m1223853767的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/m1223853767</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; m1223853767]]></copyright><item><title><![CDATA[UI设计基本原则]]></title><link>https://blog.csdn.net/m1223853767/article/details/115579995</link><guid>https://blog.csdn.net/m1223853767/article/details/115579995</guid><author>m1223853767</author><pubDate>Sat, 10 Apr 2021 19:14:52 +0800</pubDate><description><![CDATA[奥卡姆剃刀原理

   奥卡姆剃刀原理也被称为“简单有效原理”，由14世纪世纪哲学家、圣方济各会修士奥卡姆的威廉（William of Occam，约1285--1349年）提出。这个原理是告诫人们“不要浪费较多东西去做用较少的东西同样可以做好的事情”。后来以一种更为广泛的形式为人们所知--即“如无必要，勿增实体。”也就是说：如果有两个功能相等的设计，那么我们选择最简单的那一个。

   一个简洁的网页能让用户快速地找到他们所要找的东西，当在销售商品时这尤为重要。如果网页充斥着各种无用的文章...]]></description><category></category></item><item><title><![CDATA[C++ 设计模式-- 命令模式Command]]></title><link>https://blog.csdn.net/m1223853767/article/details/115290262</link><guid>https://blog.csdn.net/m1223853767/article/details/115290262</guid><author>m1223853767</author><pubDate>Sun, 28 Mar 2021 23:48:34 +0800</pubDate><description><![CDATA[什么是命令模式？
什么是命令模式？
在GOF的《设计模式:可复用面向对象软件的基础》一书中对命令模式是这样说的：将一个请求封装为一个对象，从而使你可用不同的请求对客户进行参数化；对请求排队或记录请求日志，以及支持可撤销的操作。在OOP中，一切都是对象，将请求封装成对象，符合OOP的设计思想，当将客户的单个请求封装成对象以后，我们就可以对这个请求存储更多的信息，使请求拥有更多的能力；命令模式同样能够把请求发送者和接收者解耦，使得命令发送者不用去关心请求将以何种方式被处理。
我们在12306上，单击购票，这是一]]></description><category></category></item><item><title><![CDATA[设计模式--迭代器模式]]></title><link>https://blog.csdn.net/m1223853767/article/details/115150141</link><guid>https://blog.csdn.net/m1223853767/article/details/115150141</guid><author>m1223853767</author><pubDate>Tue, 23 Mar 2021 23:06:33 +0800</pubDate><description><![CDATA[迭代器模式示意图

模板方法模式的QT代码实现
#ifndef ITERATOR_H
#define ITERATOR_H
#include 
#include 
using namespace std;
template
class Iterator
{
public:
virtual ~Iterator(){}
virtual void first() = 0;
virtual void next() = 0;
virtual Item *currentItem() = 0;
virtual bool ]]></description><category></category></item><item><title><![CDATA[Chain of Responsibility 设计模式--职责链方法]]></title><link>https://blog.csdn.net/m1223853767/article/details/114908386</link><guid>https://blog.csdn.net/m1223853767/article/details/114908386</guid><author>m1223853767</author><pubDate>Wed, 17 Mar 2021 00:13:24 +0800</pubDate><description><![CDATA[模板方法示意图

模板方法模式的QT代码实现
#ifndef HANDLE_H
#define HANDLE_H
#include 
#include 
class Handle
{
protected:
Handle *m_successor;
public:
Handle();
virtual ~Handle()=0;
void setHandle(Handle *);
virtual void handleRequest(int request) = 0;
};
class SupervisorHan]]></description><category></category></item><item><title><![CDATA[Template Method 设计模式--模板方法]]></title><link>https://blog.csdn.net/m1223853767/article/details/114907985</link><guid>https://blog.csdn.net/m1223853767/article/details/114907985</guid><author>m1223853767</author><pubDate>Wed, 17 Mar 2021 00:01:50 +0800</pubDate><description><![CDATA[模板方法示意图

概念
模板方法模式，定义一个操作中的算法骨架，而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
模板方法模式的基本代码实现
根据上面的结构图，我们可以用代码来进行实现
AbstractClass（抽象模板）：
package com.jxs.templateMethod;
/**


Created by jiangxs on 2018/5/7.
*/
public abstract class AbstractClass {
publi]]></description><category></category></item><item><title><![CDATA[设计模式与8大面向对象设计原则]]></title><link>https://blog.csdn.net/m1223853767/article/details/114494169</link><guid>https://blog.csdn.net/m1223853767/article/details/114494169</guid><author>m1223853767</author><pubDate>Sun, 07 Mar 2021 20:15:37 +0800</pubDate><description><![CDATA[提示：文章写完后，目录可以自动生成，如何生成可参考右边的帮助文档




文章目录

前言
	一、设计模式重要性？
	二、设计模式八大原则
	1.单一职责原则（Single Responsibility Principle）
		2.里氏替换原则（Liskov Substitution Principle）
		3.依赖倒置原则（Dependence InversionPrinciple）
		4.接口隔离原则（Interface Segregation Principle）
		5.迪米特原则（Law..]]></description><category></category></item><item><title><![CDATA[QT Word 操作]]></title><link>https://blog.csdn.net/m1223853767/article/details/111993595</link><guid>https://blog.csdn.net/m1223853767/article/details/111993595</guid><author>m1223853767</author><pubDate>Wed, 30 Dec 2020 16:46:44 +0800</pubDate><description><![CDATA[1、pro 文件增加


QT += axcontainer。

2、增加 OfficeWordEngine 引擎类。

此处为 抽象基类用于 Excel/Word的提供纯虚函数。


#ifndef OFFICEWORDENGINE_H
#define OFFICEWORDENGINE_H

#include &lt;QString&gt;
#include &lt;QVariant&gt;
#include &lt;QAxObject&gt;
#include &lt;QPair&gt;
class .]]></description><category></category></item><item><title><![CDATA[十大排序算法]]></title><link>https://blog.csdn.net/m1223853767/article/details/111770695</link><guid>https://blog.csdn.net/m1223853767/article/details/111770695</guid><author>m1223853767</author><pubDate>Sat, 26 Dec 2020 22:43:43 +0800</pubDate><description><![CDATA[排序基础知识

排序的定义

排序，就是重新排列表中的元素，使表中的元素满足按关键字递增或递减的过程。为了査找方便，通常要求计算机中的表是按关键字有序的。

排序的确切定义如下：


输入:n个记录R1，R2，R3…Rn,对应的关键字为K1,K2,K3…Kn
输出:输入序列的一个重排R1’，R2’，R3’…Rn’, 使得有K1’≤ K2’≤ K3’…≤ Kn’(其中≤可以换成其它的比较大小符号)。


算法的稳定性：

若待排序表中有两个元素 Ri 和 Rj，其对应的关键字 keyi...]]></description><category></category></item><item><title><![CDATA[读《代码里的世界观有感--玩玩虚的更健康》]]></title><link>https://blog.csdn.net/m1223853767/article/details/111770090</link><guid>https://blog.csdn.net/m1223853767/article/details/111770090</guid><author>m1223853767</author><pubDate>Sat, 26 Dec 2020 22:34:55 +0800</pubDate><description><![CDATA[文章目录


《代码里的世界观》
	前言
	一、面向抽象编程？
	二、消灭new的两件武器
	1.工厂模式--设计模式
		2.抽象程度
	
	总结




前言

“面向抽象编程，面向接口编程”本质应该是对数据的抽象以及行为的抽象化。



一、面向抽象编程？

个人认为面向抽象是应该在关键适合的地方去抽象，如果处处都抽象，代价会非常大。

《代码里的世界观》提到一个点抽象最讨厌的敌人是new。

我们先来看下下边的代码：

Animal animal = new Tigger(); // Anima..]]></description><category></category></item><item><title><![CDATA[acl 编译]]></title><link>https://blog.csdn.net/m1223853767/article/details/111060215</link><guid>https://blog.csdn.net/m1223853767/article/details/111060215</guid><author>m1223853767</author><pubDate>Sat, 12 Dec 2020 14:34:53 +0800</pubDate><description><![CDATA[提示：文章写完后，目录可以自动生成，如何生成可参考右边的帮助文档




文章目录

前言
	一、pandas是什么？
	二、使用步骤
	1.引入库
		2.读入数据
	
	总结




前言

C/C++程序虽然执行效率高，但程序员在开发WEB应用时却因为没有好的WEB开发框架而导致开发效率低，所以C/C++一般被用在开发执行效率高的后台服务器程序，目前有了跨平台网络通信与服务器框架（acl库）后这一情况得到很大改观，在acl库中提供了类似于JAVAHttpServlet的开发...]]></description><category></category></item><item><title><![CDATA[Qt5 QML程序Release版本发布程序无法显示的问题解决过程。]]></title><link>https://blog.csdn.net/m1223853767/article/details/79719870</link><guid>https://blog.csdn.net/m1223853767/article/details/79719870</guid><author>m1223853767</author><pubDate>Tue, 27 Mar 2018 21:41:14 +0800</pubDate><description><![CDATA[一：先解析下我的环境：1：QT平台： qt-opensource-windows-x86-mingw530-5.7.12：系统：Win7 64位平台3：使用QT quick control 2.0 版本4：本程序的名字位 Btc.exe5：本程序使用windeployqt打包的目录如下： 二：现象1：使用QML页面开发，没有使用特殊的硬件。2：在QT Creator 中正常运行，正常显示。3：使用...]]></description><category></category></item><item><title><![CDATA[QT 发布程序]]></title><link>https://blog.csdn.net/m1223853767/article/details/79719671</link><guid>https://blog.csdn.net/m1223853767/article/details/79719671</guid><author>m1223853767</author><pubDate>Tue, 27 Mar 2018 21:27:15 +0800</pubDate><description><![CDATA[玩qt5也有一段时间了，惭愧的是一直没有好好的发布过程序，因为写的都是小程序没啥需要用到发布，而且qt也说不上很熟悉，本来打算到基本掌握qt之后再来研究研究怎么打包程序，最近晚上的空闲时间多了，闲着也是闲着，于是便来试试。在网上搜索了一下资料，发现资料比较少，qt5打包的也只看见几篇博文，也不是很详细，所以当我成功的打包了我的第一个程序之后心里想着的就是一定要把经验共享出来，这方法不一定是最好的，...]]></description><category></category></item><item><title><![CDATA[QML之添加应用程序图标]]></title><link>https://blog.csdn.net/m1223853767/article/details/79714141</link><guid>https://blog.csdn.net/m1223853767/article/details/79714141</guid><author>m1223853767</author><pubDate>Tue, 27 Mar 2018 15:40:17 +0800</pubDate><description><![CDATA[使用QML实现的程序中，想加入自己的logo图标的方法：1.如果你的图标是JPG，png格式的图片，请先将其转为ico格式，网上很多的转换工具。2.找到你工程里面的.pro文件，在里面添加一句RC_ICONS = logo.ico在重新构建个qmake一下，就可以了。...]]></description><category></category></item><item><title><![CDATA[QT5---应用程序发布（使用windeployqt和NSIS）]]></title><link>https://blog.csdn.net/m1223853767/article/details/79705367</link><guid>https://blog.csdn.net/m1223853767/article/details/79705367</guid><author>m1223853767</author><pubDate>Mon, 26 Mar 2018 22:17:22 +0800</pubDate><description><![CDATA[采用动态编译的方式发布程序，即release版本。找齐动态依赖库（.dll）方法一  用Dependency Walker这个工具去找少了那些dll，不过这个工具也不怎么靠谱，一个比较靠谱但是有点稍微麻烦的方法就是拿一台没有装QT环境的电脑，然后将编译出的可执行文件放到这台电脑上去执行，根据提示找到相应的dll，并拷贝过来，不过对于一般的应用程序，下面的dll就够了：    其中platforms...]]></description><category></category></item><item><title><![CDATA[使用windeployqt工具来进行Qt的打包发布]]></title><link>https://blog.csdn.net/m1223853767/article/details/79705318</link><guid>https://blog.csdn.net/m1223853767/article/details/79705318</guid><author>m1223853767</author><pubDate>Mon, 26 Mar 2018 22:13:47 +0800</pubDate><description><![CDATA[  转自：https://blog.csdn.net/sinat_36264666/article/details/73305712    Qt 官方开发环境使用的动态链接库方式，在发布生成的exe程序时，需要复制一大堆 dll，如果自己去复制dll，很可能丢三落四，导致exe在别的电脑里无法正常运行。因此 Qt 官方开发环境里自带了一个工具：windeployqt.exe。问题的提出既然是要发布...]]></description><category></category></item><item><title><![CDATA[NSIS制作软件安装包]]></title><link>https://blog.csdn.net/m1223853767/article/details/79702064</link><guid>https://blog.csdn.net/m1223853767/article/details/79702064</guid><author>m1223853767</author><pubDate>Mon, 26 Mar 2018 18:36:20 +0800</pubDate><description><![CDATA[NSIS（Nullsoft Scriptable Install System）是一个开源的 Windows 系统下安装程序制作程序。它提供了安装、卸载、系统设置、文件解压缩等功能。这如其名字所指出的那样，NSIS 是通过它的脚本语言来描述安装程序的行为和逻辑的。NSIS 的脚本语言和通常的编程语言有类似的结构和语法，但它是为安装程序这类应用所设计的。http://nsis.sourceforge...]]></description><category></category></item><item><title><![CDATA[C++中不能声明为虚函数]]></title><link>https://blog.csdn.net/m1223853767/article/details/79619781</link><guid>https://blog.csdn.net/m1223853767/article/details/79619781</guid><author>m1223853767</author><pubDate>Tue, 20 Mar 2018 00:07:49 +0800</pubDate><description><![CDATA[常见的不不能声明为虚函数的有：普通函数（非成员函数）；静态成员函数；内联成员函数；构造函数；友元函数。1．为什么C++不支持普通函数为虚函数？普通函数（非成员函数）只能被overload，不能被override，声明为虚函数也没有什么意思，因此编译器会在编译时邦定函数。多态的运行期行为体现在虚函数上，虚函数通过继承方式来体现出多态作用，顶层函数不属于成员函数，是不能被继承的2．为什么C++不支持构...]]></description><category></category></item><item><title><![CDATA[linux查看设备信息和驱动安装信息]]></title><link>https://blog.csdn.net/m1223853767/article/details/79615011</link><guid>https://blog.csdn.net/m1223853767/article/details/79615011</guid><author>m1223853767</author><pubDate>Mon, 19 Mar 2018 17:45:30 +0800</pubDate><description><![CDATA[lspci是列出所有的硬件信息，包括已经安装了驱动还是没有安装驱动的硬件设备，因为根据pci规范，只要改设备在pci总线上挂着，就可以读到起Vendor ID和Device ID等一些列信息，就能知道这个设备是什么设备。如果要确认有没有安装驱动，就需要通过lsmod命令来看，当然lsmod命令只能显示编译linux内核时选中为“M”的驱动程序，最靠谱的还是dmesg来查看该设备的驱动有没有安装，d...]]></description><category></category></item><item><title><![CDATA[boost date_time 中 time 运用]]></title><link>https://blog.csdn.net/m1223853767/article/details/79508901</link><guid>https://blog.csdn.net/m1223853767/article/details/79508901</guid><author>m1223853767</author><pubDate>Sat, 10 Mar 2018 16:16:23 +0800</pubDate><description><![CDATA[（1）时间长度（2）时间长度的精度（3）时间点（4）创建时间点对象（5）操作时间点对象（6）与tm，time_t等结构的转换（7）时间区间（8）时间迭代器（9）综合运用。 需要包含库文件和命名空间#include &amp;lt;boost/date_time/posix_time/posix_time.hpp&amp;gt;
using namespace boost::posix_time;相当于在年月日下加...]]></description><category></category></item><item><title><![CDATA[boost date_time 下 date的使用]]></title><link>https://blog.csdn.net/m1223853767/article/details/79507622</link><guid>https://blog.csdn.net/m1223853767/article/details/79507622</guid><author>m1223853767</author><pubDate>Sat, 10 Mar 2018 15:31:58 +0800</pubDate><description><![CDATA[通过查看gregrorian目录下可以看到许多关于时间处理的源文件。date_time 库支持无限时间与无效时间等概念。date_time 支持1400-01-01 到9999-12-31之间的日期计算。该库位于命名空间下的grepgorian 中，使用必须包含头文件#include&amp;lt;boost/date_time/gregorian/gregorian.hpp&amp;gt;使用using nam...]]></description><category></category></item></channel></rss>