博客园 - 忧郁的加菲猫
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=74006
2017-04-22T21:09:40Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
feed.cnblogs.com
https://www.cnblogs.com/whiteyun/archive/2013/03/06/2945752.html
2013年个人计划 - 忧郁的加菲猫
关键词:学习、健康、修养技术1、恶补基础 发现自己的基础太差,有时真的不足以支撑上层的学习需求,下决心把以下内容重新系统学习一遍并形成笔记,没事就翻翻,让自己变得更有底气。 计算机组成原理 操作系统原理 数据结构和算法 软件工程、UML CPU架构及汇编语言2、知识加固 这些东西都了解不够深入,对于...
2013-03-06T03:41:00Z
2013-03-06T03:41:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】关键词:学习、健康、修养技术1、恶补基础 发现自己的基础太差,有时真的不足以支撑上层的学习需求,下决心把以下内容重新系统学习一遍并形成笔记,没事就翻翻,让自己变得更有底气。 计算机组成原理 操作系统原理 数据结构和算法 软件工程、UML CPU架构及汇编语言2、知识加固 这些东西都了解不够深入,对于... <a href="https://www.cnblogs.com/whiteyun/archive/2013/03/06/2945752.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/12/01/2270132.html
innodb_flush_log_at_trx_commit - 忧郁的加菲猫
innodb_buffer_pool_size如 果用Innodb,那么这是一个重要变量。相对于MyISAM来说,Innodb对于buffer size更敏感。MySIAM可能对于大数据量使用默认的key_buffer_size也还好,但Innodb在大数据量时用默认值就感觉在爬了。 Innodb的缓冲池会缓存数据和索引,所以不需要给系统的缓存留空间,如果只用Innodb,可以把这个值设为内存的70%-80%。和 key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。innodb_additional_pool_size这个的效果不是很明显,至少
2011-12-01T02:33:00Z
2011-12-01T02:33:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】innodb_buffer_pool_size如 果用Innodb,那么这是一个重要变量。相对于MyISAM来说,Innodb对于buffer size更敏感。MySIAM可能对于大数据量使用默认的key_buffer_size也还好,但Innodb在大数据量时用默认值就感觉在爬了。 Innodb的缓冲池会缓存数据和索引,所以不需要给系统的缓存留空间,如果只用Innodb,可以把这个值设为内存的70%-80%。和 key_buffer相同,如果数据量比较小也不怎么增加,那么不要把这个值设太高也可以提高内存的使用率。innodb_additional_pool_size这个的效果不是很明显,至少 <a href="https://www.cnblogs.com/whiteyun/archive/2011/12/01/2270132.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/10/17/2215532.html
GDB的使用方法 (2) - 忧郁的加菲猫
一、GDB的静态调试启动方法:1、当需要在命令行通过gdb来启动可执行程序的时候,可使用一下命令:gdb<可执行程序名>这个时候gdb会加载可执行程序的符号表和堆栈,并为启动程序作好准备;接下来,需要设置可执行程序的命令行参数:setargs<参数列表>然后设置断点:b或break;最后通过命令r或run来启动程序,或者通过c或continue命令来继续已经被暂停的程序;2、当程序core的时候,需要查看core文件的内容,颗使用以下方式:gdb<可执行程序名><core文件名>这个时候,gdb会结合可执行程序的符号和堆栈来查看core文件内容,
2011-10-17T08:22:00Z
2011-10-17T08:22:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】一、GDB的静态调试启动方法:1、当需要在命令行通过gdb来启动可执行程序的时候,可使用一下命令:gdb<可执行程序名>这个时候gdb会加载可执行程序的符号表和堆栈,并为启动程序作好准备;接下来,需要设置可执行程序的命令行参数:setargs<参数列表>然后设置断点:b或break;最后通过命令r或run来启动程序,或者通过c或continue命令来继续已经被暂停的程序;2、当程序core的时候,需要查看core文件的内容,颗使用以下方式:gdb<可执行程序名><core文件名>这个时候,gdb会结合可执行程序的符号和堆栈来查看core文件内容, <a href="https://www.cnblogs.com/whiteyun/archive/2011/10/17/2215532.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/09/18/2180560.html
【转】大端模式与小端模式、网络字节顺序与主机字节顺序 (经典) - 忧郁的加菲猫
大端模式与小端模式一、概念及详解 在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式。 先回顾两个关键词,MSB和LSB: MSB:Most Significant Bit ------- 最高有效位 LSB:Least Significant Bit ------- 最低有效位 大端模式(big-edian) big-endian:MSB存放在最低端的地址上。 举例,双字节数0x1234以big-endian的方式存在起始地址0x00002000中: | data |<-- address | 0x12...
2011-09-18T10:50:00Z
2011-09-18T10:50:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】大端模式与小端模式一、概念及详解 在各种体系的计算机中通常采用的字节存储机制主要有两种: big-endian和little-endian,即大端模式和小端模式。 先回顾两个关键词,MSB和LSB: MSB:Most Significant Bit ------- 最高有效位 LSB:Least Significant Bit ------- 最低有效位 大端模式(big-edian) big-endian:MSB存放在最低端的地址上。 举例,双字节数0x1234以big-endian的方式存在起始地址0x00002000中: | data |<-- address | 0x12... <a href="https://www.cnblogs.com/whiteyun/archive/2011/09/18/2180560.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/07/22/2113668.html
dll的概念、dll导出类(转) - 忧郁的加菲猫
1、 DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。 静态链接库与动态链接库的区别: (1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。 (2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 动态链接库的分类:Visual C++支持三种DLL,它们分别是: (1)Non-MFC D
2011-07-22T06:59:00Z
2011-07-22T06:59:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】1、 DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。 静态链接库与动态链接库的区别: (1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。 (2)静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 动态链接库的分类:Visual C++支持三种DLL,它们分别是: (1)Non-MFC D <a href="https://www.cnblogs.com/whiteyun/archive/2011/07/22/2113668.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/07/22/2113560.html
通过GetProcAddress函数动态调用dll中地函数,是否必须通过extern C声明导出函数?(转) - 忧郁的加菲猫
通过GetProcAddress函数动态调用dll中的函数,是否必须通过extern "C"声明导出函数? [已结贴,结贴人:darongtou]如题,网上搜了N多资料,一直找不到确定的答案,目前我的答案是“是”。晚上因为一个程序,好好研究了一下。很多资料上都只是说明“如果没有 extern "C" 修饰,输出函数仅仅能从 C++ 代码中调用。”却并没有明确这个调用是通过显式调用还是隐式调用,我也一直没有看到过有代码是通过显示调用没有 extern "C" 修饰的导出函数。MSDN上也只是说The spelling and case
2011-07-22T01:49:00Z
2011-07-22T01:49:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】通过GetProcAddress函数动态调用dll中的函数,是否必须通过extern "C"声明导出函数? [已结贴,结贴人:darongtou]如题,网上搜了N多资料,一直找不到确定的答案,目前我的答案是“是”。晚上因为一个程序,好好研究了一下。很多资料上都只是说明“如果没有 extern "C" 修饰,输出函数仅仅能从 C++ 代码中调用。”却并没有明确这个调用是通过显式调用还是隐式调用,我也一直没有看到过有代码是通过显示调用没有 extern "C" 修饰的导出函数。MSDN上也只是说The spelling and case <a href="https://www.cnblogs.com/whiteyun/archive/2011/07/22/2113560.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/07/22/2113544.html
VC编译器中混有.c文件时出现fatal error C1853错误(转) - 忧郁的加菲猫
第一章的sample1,文中提到由于windows底层代码基本上是用c语言编写的,因此新工程里的CPP文件要改为C文件。 但是在编译时出现错误fatal error C1853: "debug/1_1.pch" is not a precomplied header file with this complier...... 这个问题还真是头一次遇到,怎么办?百度一下,解决办法如下: 错误原因: 该错误是因为当项目中混合了 .cpp 和 .c 文件时,编译器会对它们采取不同的编译方式(主要是因为对函数声明的处理方式不同),因而不能共用一个预编译头文件。 在 VC++ 中,默
2011-07-22T01:37:00Z
2011-07-22T01:37:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】第一章的sample1,文中提到由于windows底层代码基本上是用c语言编写的,因此新工程里的CPP文件要改为C文件。 但是在编译时出现错误fatal error C1853: "debug/1_1.pch" is not a precomplied header file with this complier...... 这个问题还真是头一次遇到,怎么办?百度一下,解决办法如下: 错误原因: 该错误是因为当项目中混合了 .cpp 和 .c 文件时,编译器会对它们采取不同的编译方式(主要是因为对函数声明的处理方式不同),因而不能共用一个预编译头文件。 在 VC++ 中,默 <a href="https://www.cnblogs.com/whiteyun/archive/2011/07/22/2113544.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/07/21/2112928.html
DLL的Export和Import及extern - 忧郁的加菲猫
DLL的export是指将DLL中的函数和数据输出到其它程式中,以供其使用。DLL的import是指使用DLL的程式引入DLL中的函数和数据。DLL的exportDLL 中包含有一个表,称为export table(以下简称ET),其中包含了DLL中可以被外部程式使用的所有函数和数据的名字。只有记录在ET中的函数和数据才可以被外部程式所使用(如果 没有.DEF文件的话),其它所有没有记录在ET中的函数和数据都被视为是DLL私有的。因此,要将DLL中的函数和数据export只有两个方法:1、为DLL创建一个.DEF文件(模块定义文件),并在build该DLL时使用这个.DEF文件。使用这种方法使
2011-07-21T07:58:00Z
2011-07-21T07:58:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】DLL的export是指将DLL中的函数和数据输出到其它程式中,以供其使用。DLL的import是指使用DLL的程式引入DLL中的函数和数据。DLL的exportDLL 中包含有一个表,称为export table(以下简称ET),其中包含了DLL中可以被外部程式使用的所有函数和数据的名字。只有记录在ET中的函数和数据才可以被外部程式所使用(如果 没有.DEF文件的话),其它所有没有记录在ET中的函数和数据都被视为是DLL私有的。因此,要将DLL中的函数和数据export只有两个方法:1、为DLL创建一个.DEF文件(模块定义文件),并在build该DLL时使用这个.DEF文件。使用这种方法使 <a href="https://www.cnblogs.com/whiteyun/archive/2011/07/21/2112928.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/07/07/2099918.html
预处理器的预定义宏大全 - 忧郁的加菲猫
符合ANSI的预定义宏:__DATE__:表示当前源文件编译时的日期,格式为:月/天/年(Mmm dd yyyy)。__FILE__:表示当前正在处理的源文件名称。__LINE__:表示当前正在处理的源文件的行,可以用#line指令修改。__STDC__:表示是ANSI C标准。只有在编译器选项指定了/Za,并且不是编译C++程序时,被定义为常整数1;否则未定义。__TIME__:表示当前源文件的最近编译时的时间,格式为:小时/分/秒(hh:mm:ss)。__TIMESTAMP__:表示当前源文件的最近修改日期和时间,格式为:Ddd Mmm dd hh:mm:ss yyyy,其中Ddd是星期的
2011-07-07T03:47:00Z
2011-07-07T03:47:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】符合ANSI的预定义宏:__DATE__:表示当前源文件编译时的日期,格式为:月/天/年(Mmm dd yyyy)。__FILE__:表示当前正在处理的源文件名称。__LINE__:表示当前正在处理的源文件的行,可以用#line指令修改。__STDC__:表示是ANSI C标准。只有在编译器选项指定了/Za,并且不是编译C++程序时,被定义为常整数1;否则未定义。__TIME__:表示当前源文件的最近编译时的时间,格式为:小时/分/秒(hh:mm:ss)。__TIMESTAMP__:表示当前源文件的最近修改日期和时间,格式为:Ddd Mmm dd hh:mm:ss yyyy,其中Ddd是星期的 <a href="https://www.cnblogs.com/whiteyun/archive/2011/07/07/2099918.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/07/07/2099912.html
md /mdd /ml /mt/mtd - 忧郁的加菲猫
1、VC编译选项 多线程 (/MT) 多线程调试 (/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)2、C 运行时库 库文件 Single thread(static link) ML libc.lib Debug single thread(static link) MLd libcd.lib MultiThread(static link) MT libcmt.lib Debug multiThread(static link) MTd libcmtd.lib MultiThread(dynamic link) MD msvcrt.lib Debug multiTh
2011-07-07T03:43:00Z
2011-07-07T03:43:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】1、VC编译选项 多线程 (/MT) 多线程调试 (/MTd) 多线程 DLL (/MD) 多线程调试 DLL (/MDd)2、C 运行时库 库文件 Single thread(static link) ML libc.lib Debug single thread(static link) MLd libcd.lib MultiThread(static link) MT libcmt.lib Debug multiThread(static link) MTd libcmtd.lib MultiThread(dynamic link) MD msvcrt.lib Debug multiTh <a href="https://www.cnblogs.com/whiteyun/archive/2011/07/07/2099912.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/07/07/2099774.html
CString,int,string,char*之间的转换 - 忧郁的加菲猫
<C++标准函数库>中说的有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”\0“的字符串数组 2,c_str(),返回有”\0“的字符串数组 3,copy().................................................................int 转 CString: CString.Format("%d",int);.................................................................string 转 CStri
2011-07-07T01:54:00Z
2011-07-07T01:54:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】<C++标准函数库>中说的有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”\0“的字符串数组 2,c_str(),返回有”\0“的字符串数组 3,copy().................................................................int 转 CString: CString.Format("%d",int);.................................................................string 转 CStri <a href="https://www.cnblogs.com/whiteyun/archive/2011/07/07/2099774.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/06/02/2067742.html
关于_beginthreadex、_beginthread和CreateThread - 忧郁的加菲猫
在微软的 Programming Techniques 说明文件中有一句看似悲惨的警告: 警告:如果你在一个与 LIBCMT.LIB链接的程序中调用C runtime 函数, 你的线程就必须以 _beginthread() 启动之。不要使用 Win32 的ExitThread() 和 CreateThread()。首先看一下_beginthreadex: 1、如果你写一个多线程程序,而且没有使用MFC,那么你应该总是和多线程版本的C Run time library进行链接。并且应该总是以_beginthreadex和_endthreadex取代createthread和exitthread。
2011-06-02T02:36:00Z
2011-06-02T02:36:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】在微软的 Programming Techniques 说明文件中有一句看似悲惨的警告: 警告:如果你在一个与 LIBCMT.LIB链接的程序中调用C runtime 函数, 你的线程就必须以 _beginthread() 启动之。不要使用 Win32 的ExitThread() 和 CreateThread()。首先看一下_beginthreadex: 1、如果你写一个多线程程序,而且没有使用MFC,那么你应该总是和多线程版本的C Run time library进行链接。并且应该总是以_beginthreadex和_endthreadex取代createthread和exitthread。 <a href="https://www.cnblogs.com/whiteyun/archive/2011/06/02/2067742.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/05/27/2059670.html
Linux中Samba详细安装 - 忧郁的加菲猫
为了实现Windows主机与Linux服务器之间的资源共享,Linux操作系统提供了Samba服务,Samba服务为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互相通信,为广泛的Linux爱好者提供了极大方便。本文简要介绍如何在Linux操作系统上搭建Samba服务器和简单配置。1、服务查询 默认情况下,Linux系统在默认安装中已经安装了Samba服务包的一部分 ,为了对整个过程有一个完整的了解,在此先将这部分卸载掉。使用命令 rpm -qa | grep samba ,默认情况下可以查询到两个已经存在的包: samba-client-3.0.33-3.
2011-05-27T03:19:00Z
2011-05-27T03:19:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】为了实现Windows主机与Linux服务器之间的资源共享,Linux操作系统提供了Samba服务,Samba服务为两种不同的操作系统架起了一座桥梁,使Linux系统和Windows系统之间能够实现互相通信,为广泛的Linux爱好者提供了极大方便。本文简要介绍如何在Linux操作系统上搭建Samba服务器和简单配置。1、服务查询 默认情况下,Linux系统在默认安装中已经安装了Samba服务包的一部分 ,为了对整个过程有一个完整的了解,在此先将这部分卸载掉。使用命令 rpm -qa | grep samba ,默认情况下可以查询到两个已经存在的包: samba-client-3.0.33-3. <a href="https://www.cnblogs.com/whiteyun/archive/2011/05/27/2059670.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/05/19/2051097.html
MySQL字符集问题 - 忧郁的加菲猫
MySQL字符集介绍MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server), 数据库(database), 数据表(table), 连接(connection)。MySQL默认字符集 MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。 但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢? (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是
2011-05-19T06:57:00Z
2011-05-19T06:57:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】MySQL字符集介绍MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server), 数据库(database), 数据表(table), 连接(connection)。MySQL默认字符集 MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。 但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢? (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 <a href="https://www.cnblogs.com/whiteyun/archive/2011/05/19/2051097.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2011/04/13/2014913.html
Linux下Mysql的配置 - 忧郁的加菲猫
安装 rmp -ivh MySQL-server-4.1.22-0.glibc23.i386.rpm --nodeps rmp -ivhMySQL-client-4.1.22-0.glibc23.i386.rpm--nodeps查看是否安装成功 netstat -atln 命令看到3306端口开放说明安装成功登录 mysql [-u username] [-h host] [-p[password]] [dbname]初始无密码,这个mysql可执行文件在/usr/bin/mysql目录 1、数据库目录 /var/lib/mysql/ 2、配置文件 /usr/share/mysql(mysql
2011-04-13T07:32:00Z
2011-04-13T07:32:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】安装 rmp -ivh MySQL-server-4.1.22-0.glibc23.i386.rpm --nodeps rmp -ivhMySQL-client-4.1.22-0.glibc23.i386.rpm--nodeps查看是否安装成功 netstat -atln 命令看到3306端口开放说明安装成功登录 mysql [-u username] [-h host] [-p[password]] [dbname]初始无密码,这个mysql可执行文件在/usr/bin/mysql目录 1、数据库目录 /var/lib/mysql/ 2、配置文件 /usr/share/mysql(mysql <a href="https://www.cnblogs.com/whiteyun/archive/2011/04/13/2014913.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2010/12/05/1897026.html
设计模式 - 总结篇 - 忧郁的加菲猫
一个月下来,把常见的20个设计模式好好复习并且逐个用C++实现了一遍,收获还是很大的,很多东西看上去明白了但是真正动手去做的时候发现其实还是不明白--我深知这个道理,于是不敢怠慢,不敢写什么所谓的解释原理的伪代码,不敢说所谓的"知道原理就可以了"....因为我知道,我还还没有资格说这个话,至少对于设计模式而言我还是一个初学者,唯有踏实和实干才能慢慢的掌握到知识. 在我学习设计模式的过程中,觉得造成理解困难的主要是以下几点,谈一下自己的体会,希望对他人有帮助,不要走上我的老路上,毕竟我花了N长的时间才敢号称自己入门了~~!!-_-: 1)Gof并不适合于初学者.初学设计模式的一般都是从Gof入门
2010-12-05T08:43:00Z
2010-12-05T08:43:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】一个月下来,把常见的20个设计模式好好复习并且逐个用C++实现了一遍,收获还是很大的,很多东西看上去明白了但是真正动手去做的时候发现其实还是不明白--我深知这个道理,于是不敢怠慢,不敢写什么所谓的解释原理的伪代码,不敢说所谓的"知道原理就可以了"....因为我知道,我还还没有资格说这个话,至少对于设计模式而言我还是一个初学者,唯有踏实和实干才能慢慢的掌握到知识. 在我学习设计模式的过程中,觉得造成理解困难的主要是以下几点,谈一下自己的体会,希望对他人有帮助,不要走上我的老路上,毕竟我花了N长的时间才敢号称自己入门了~~!!-_-: 1)Gof并不适合于初学者.初学设计模式的一般都是从Gof入门 <a href="https://www.cnblogs.com/whiteyun/archive/2010/12/05/1897026.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896928.html
设计模式 - Visitor 模式(访问者模式) - 忧郁的加菲猫
作用:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.UML结构图:解析: Visitor模式把对结点的访问封装成一个抽象基类,通过派生出不同的类生成新的访问方式.在实现的时候,在visitor抽象基类中声明了对所有不同结点进行访问的接口函数,如图中的VisitConcreateElementA函数等,这样也造成了Visitor模式的一个缺陷--新加入一个结点的时候都要添加Visitor中的对其进行访问接口函数,这样使得所有的Visitor及其派生类都要重新编译了,也就是说Visitor模式一个缺点就是添加新的结点十分困难.另外,还需要
2010-12-05T07:46:00Z
2010-12-05T07:46:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】作用:表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作.UML结构图:解析: Visitor模式把对结点的访问封装成一个抽象基类,通过派生出不同的类生成新的访问方式.在实现的时候,在visitor抽象基类中声明了对所有不同结点进行访问的接口函数,如图中的VisitConcreateElementA函数等,这样也造成了Visitor模式的一个缺陷--新加入一个结点的时候都要添加Visitor中的对其进行访问接口函数,这样使得所有的Visitor及其派生类都要重新编译了,也就是说Visitor模式一个缺点就是添加新的结点十分困难.另外,还需要 <a href="https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896928.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896926.html
设计模式 - Memento 模式(备忘录模式) - 忧郁的加菲猫
作用:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。UML结构图:解析: Memento模式中封装的是需要保存的状态,当需要恢复的时候才取出来进行恢复。原理很简单,实现的时候需要注意一个地方:窄接口和宽接口。所谓的宽接口就是一般意义上的接口,把对外的接口作为public成员;而窄接口反之,把接口作为private成员,而把需要访问这些接口函数的类作为这个类的友元类,也就是说接口只暴露给了对这些接口感兴趣的类,而不是暴露在外部。下面的实现就是窄实现的方法来实现的。代码实现:Memento.hCode highlighting
2010-12-05T07:41:00Z
2010-12-05T07:41:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】作用:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。UML结构图:解析: Memento模式中封装的是需要保存的状态,当需要恢复的时候才取出来进行恢复。原理很简单,实现的时候需要注意一个地方:窄接口和宽接口。所谓的宽接口就是一般意义上的接口,把对外的接口作为public成员;而窄接口反之,把接口作为private成员,而把需要访问这些接口函数的类作为这个类的友元类,也就是说接口只暴露给了对这些接口感兴趣的类,而不是暴露在外部。下面的实现就是窄实现的方法来实现的。代码实现:Memento.hCode highlighting <a href="https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896926.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896920.html
设计模式 - Iterator 模式(迭代器模式) - 忧郁的加菲猫
作用:提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示。UML结构图:解析: Iterator几乎是大部分人在初学C++的时候就无意之中接触到的第一种设计模式,因为在STL之中,所有的容器类都有与之相关的迭代器.以前初学STL的时候,时常在看到讲述迭代器作用的时候是这么说的:提供一种方式,使得算法和容器可以独立的变化,而且在访问容器对象的时候不必暴露容器的内部细节,具体是怎么做到这一点的呢?在STL的实现中,所有的迭代器(Iterator)都必须遵照一套规范,这套规范里面定义了几种类型的名称,比如对象的名称,指向对象的指针的名称,指向对象的引用的名称....等等,当新
2010-12-05T07:33:00Z
2010-12-05T07:33:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】作用:提供一种方法顺序访问一个聚合对象中各个元素,,而又不需暴露该对象的内部表示。UML结构图:解析: Iterator几乎是大部分人在初学C++的时候就无意之中接触到的第一种设计模式,因为在STL之中,所有的容器类都有与之相关的迭代器.以前初学STL的时候,时常在看到讲述迭代器作用的时候是这么说的:提供一种方式,使得算法和容器可以独立的变化,而且在访问容器对象的时候不必暴露容器的内部细节,具体是怎么做到这一点的呢?在STL的实现中,所有的迭代器(Iterator)都必须遵照一套规范,这套规范里面定义了几种类型的名称,比如对象的名称,指向对象的指针的名称,指向对象的引用的名称....等等,当新 <a href="https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896920.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896917.html
设计模式 - State 模式(状态模式) - 忧郁的加菲猫
作用:允许一个对象在其内部状态改变时改变它的行为。UML结构图:解析: State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给了具体的状态类去负责.同时,State模式和Strategy模式在图示上有很多相似的地方,需要说明的是两者的思想都是一致的,只不过封装的东西不同:Sta
2010-12-05T07:26:00Z
2010-12-05T07:26:00Z
忧郁的加菲猫
https://www.cnblogs.com/whiteyun/
【摘要】作用:允许一个对象在其内部状态改变时改变它的行为。UML结构图:解析: State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的问题,大部分人是采用switch-case语句进行处理的,这样会造成一个问题:分支过多,而且如果加入一个新的状态就需要对原来的代码进行编译.State模式采用了对这些不同的状态进行封装的方式处理这类问题,当状态改变的时候进行处理然后再切换到另一种状态,也就是说把状态的切换责任交给了具体的状态类去负责.同时,State模式和Strategy模式在图示上有很多相似的地方,需要说明的是两者的思想都是一致的,只不过封装的东西不同:Sta <a href="https://www.cnblogs.com/whiteyun/archive/2010/12/05/1896917.html" target="_blank">阅读全文</a>