- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 单例模式
保证一个类只有一个实例,并提供一个访问它的全局访问点。首先,需要保证一个类只有一个实例;在类中,要构造一个实例,就必须调用类的构造函数,如此,为了防止在外部调用类的构造函数而构造实例,需要将构造函数的访问权限标记为protected或private;最后,需要提供要给全局访问点,就需要在类中定义一个static函数,返回在类内部唯一构造的实例。意思很明白,使用UML类图表示如下:
2015-08-06 20:47:24 329
原创 模板方法模式
定义一个操作中算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。UML图:优点:实现了代码复用;缺点:算法骨架不易升级,模板与子类间耦合性高,修改模板,子类也会受到影响。C++代码实现://模板方法模式#include#includeusing nam
2015-08-06 19:45:57 319
原创 命令模式
命令模式就是把一个请求或者操作封装到一个对象中,可提供撤销、重做等操作。在OOP中,一切都是对象,将请求封装成对象,符合OOP的设计思想,当将客户的单个请求封装成对象以后,我们就可以对这个请求存储更多的信息,使请求拥有更多的能力;命令模式同样能够把请求发送者和接收者解耦,使得命令发送者不用去关心请求将以何种方式被处理。UML图:优点: 1.命令模式
2015-08-04 21:24:30 312
原创 策略模式
策略模式为了适应不同的需求,只把变化点封装了,这个变化点就是实现不同需求的算法,但是,用户需要知道各种算法的具体情况。就像上面的加班工资,不同的加班情况,有不同的算法。我们不能在程序中将计算工资的算法进行硬编码,而是能自由的变化的。这就是策略模式。UML图:使用场景:1、许多相关的类仅仅是行为有异,“策略”提供了一种用多个行为中的一种来配置一个类的方法。
2015-07-30 21:29:24 373
原创 建造者模式
一个复杂对象的创建,其通常是由很多的子对象构成;如果一个对象能够直接就创建好了,那么也不会称之为复杂对象。由于项目中需求的变化,这个复杂对象的各个部分经常会发生剧烈的变化,但是,不管怎么变化,将它们组合在一起,组成一个复杂的对象的事实是不会变的。建造者模式就提供了一种“封装机制”来将各个对象的变化隔离开,最终,组合成复杂对象的过程是不会变的。UML图:优点:
2015-07-29 21:22:04 434
原创 Heap
heap,堆是一种完全二叉树,所以可以选择array来存储所有节点。实现heap仅需要一个array和一组heap算法(用来插入、删除元素,取极值,将某一整组数据排列成一个heap),根据元素排列方式,分为大根堆和小根堆。heap中所有元素都遵循特别的排列规则,所以heap不提供遍历功能,也不提供迭代器。heap算法:C++代码实现,非STL源码。//heap算法,底层用v
2015-07-29 16:38:23 388
原创 常用SQL
查询:select ... from ... where ... group by ... having ...;左连接右连接全连接left join、 right join、 full join、 inner join 内连接、等值连接若A有10条数据,B中有15条数据,AB中公共数据有5条select * from A left join
2015-07-28 22:25:00 247
原创 简单工厂模式、工厂方法模式、抽象工厂模式
简单工厂模式并不是23中设计模式中的,但是在实际的应用中却经常使用。UML图: 简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。 在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这
2015-07-28 22:13:47 328
原创 Deuqe
deque是一种双向开口的连续线性空间,vector是单向开口的连续线性空间。deque与vector区别:1、deque是双向开口的连续节点,2、deque没有所谓容量概念。deque是分段连续的空间,由一段一段的定量连续空间构成,deque类源码:template class deque{public: typedef T valu
2015-07-28 19:46:34 528
原创 List
List概述对于任何位置的插入删除,时间复杂度为O(1)。list类似于链表,双向链表,环状双向链表template struct _list_node{ typedef void* pointer; pointer prev; pointer next;};list的迭代器重要性质:插入inse
2015-07-27 20:53:39 299
原创 Vector
vector定义与使用使用前引用头文件 #include类的源码:class vector{protected: iterator start; //目前使用空间的头 iterator finish; //目前使用空间的尾 iterator end_of_storage; //目前可用空间的尾
2015-07-27 20:52:56 321
转载 ASP.NET 3.5 MVC框架深度解析
一、 简介MVC(模型—视图—控制器)结构模式把一个应用程序拆分成三个主要组件:模型、视图和控制器。在创建基于MVC框架的Web应用程序时,你可以把ASP.NET MVC框架作为ASP.NET Web表单模式方案的一种重要候选。较之于基于Web表单的应用程序,ASP.NET MVC框架是一个轻量级的、测试性强的描述框架,它能够与现有ASP.NET特征(例如母版页面和基于成员身份的认证)紧
2015-07-17 21:08:04 626
原创 动态运行时类型的显式转换
《effective C++》中第九章的内容,稍稍加上自己的理解。C++中,显式转换也称为强制类型转换(cast),包括以下列名字命名的强制类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。一般形式: cast-name(expression)dynamic_cast:该运算符把变量转换成type类型的对象,但
2015-06-08 16:56:18 479
转载 C++操作符的优先级
C++操作符的优先级C++操作符的优先级操作符及其结合性功能用法LLL::::::全局作用域类作用域 名字空间作用域::nameclass::namenamespace::nameLLLLL.->[]()()
2015-05-21 11:28:36 319
转载 MySQL百万级数据库查询优化技巧
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:sel
2015-05-06 15:56:24 307
转载 c/c++里的 堆区 栈区 静态区 文字常量区 程序代码区
一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 堆(heap):由malloc,new等分配的空间的地址,地址由低向高增长(程序员释放)。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
2015-05-05 20:10:46 391
原创 C++容器学习总结
C++中,容器主要分为两类:顺序容器(vector、list、deque)、关联容器(map、set、multimap、multiset)顺序容器顺序容器的定义:#include#include#includevector svec;list ilist;deque item;初始化:list slist(svec.begin(),svec.end());顺
2015-05-05 15:12:36 450
原创 加快SQLServer操作的技术
GFT项目主要是对SQLServer的插入和查询操作,由于数据量大,加速是一重要任务,主要从插入和查询两方面进行了优化:1、查询聚类索引索引按照存储结构分为聚类索引和非聚类索引(采用聚类索引,因为order by, group by 等较为频繁)索引:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索引可以映
2015-04-28 21:53:14 590
转载 什么是面向对象编程?
面相对象不是某一种语言的特性,而是一种编程思想。 C也是可以编写出很好的OO代码的,Gtk+就是典型的例子。 我们很多初学者往往一提到面相对象就一头雾水,我觉得很大程度上都是因为我们学习的第一们语言是C,而struct总是在后面才讲到,用C实现继承技术需要一定技巧,一般的教材上都不讲,加之我们刚开始遇到的学习程序有很小,很容易一个简单的流程就处理完了……这所有因素结合在一起,就导致我们
2015-04-28 21:14:34 524
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人