自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(178)
  • 资源 (19)
  • 收藏
  • 关注

原创 设计模式 - 结构型模式总结

我们介绍完了所有GOF设计模式书上的7种结构型设计模式,又到了总结的时候了。如果回顾一下这7种结构型设计模式,我们会发现有些模式很类似。是的,从结构来看确实很像。但是我们讲设计模式很多时候是从设计者的意图来区分的,单从代码结构来看可能是很类似,但是意图完全不一样。 Adapter,Bridge,FacadeAdapter:目的是为了解决不同接口类库之间不能一起工作的问题。Adapt

2012-11-05 18:01:33 725

原创 设计模式 - 代理模式

代理模式,PROXY。这是一个比较常用的结构型模式。个人比较喜欢这个模式,代理模式一个比较出名的应用就是智能指针。 意图为其他对象提供一个代理以控制对这个对象的访问。 结构图 一眼看去是不是和Decorator(装饰模式)很像?是啊,从结构图看,确实很像,或者说几乎一样。虽说它们的结构图很像,但是它们的意图完全不一样:装饰模式是为了给对象增加功能而代理模式是为了控制

2012-11-05 16:54:26 716

原创 设计模式 - 享元模式

享元模式的英文是flyweight pattern,不知道哪位大哥第一个把flyweight翻译成享元的,真牛,翻译的很形象。个人认为享元模式还是挺复杂的。面向对象编程给我们带来了非常多的好处,但是同时它也有弊端,如果一个系统拥有非常非常多的对象,那么内存消耗会比较大,而且比较难管理。比如:1. 游戏里面的粒子系统,大量的微粒,如果为每个微粒创建一个对象的话,那么对象数量是相当的恐怖;

2012-11-02 16:43:14 890

原创 设计模式 - 外观模式

外观模式还是相当普遍的,先来看看几个例子:1. 一台电脑有很多东西组成,包括硬件,软件。硬件又包含主板,CPU,内存什么的,软件又包含操作系统,操作系统里面又有一大堆非常复杂的驱动,各个驱动之间又有很多关系。那么我们怎么启动这么复杂的一个东西呢?我们所要做的就是按一下电源开关。当用户按下电源开关后,操作系统会把电脑运行起来,中间过程那是相当的复杂。对于用户来说,电源开关就是一个简单使用的接口,

2012-11-02 11:43:13 716

原创 设计模式 - 装饰模式

意图动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。 结构图结构图好像和Composite模式有点像。确实是,我们后面再讲Decorator和Composite模式的关系。从结构图中我们可以看出Decorator的子类可以对Component进行一些扩充。这也就是Decorator模式的作用:对一个现有的类进行扩充来满足更多的

2012-11-01 16:23:48 917

原创 C++ 虚析构函数

C++类里面,我们经常可以看到析构函数是虚函数,这个虚函数有什么作用吗?我们可以通过一个很简单的例子来看看虚析构函数的作用。class CBase{public: virtual ~CBase() { printf("CBase::~CBase()\n"); }};class CChild: public CBase{public: virtual ~CChild()

2012-11-01 14:28:04 3478 1

原创 C++类成员冒号初始化以及构造函数内赋值

通常我们对类成员进行“初始化”有两种方式:1. 构造函数后面跟冒号;2. 构造函数里面对成员进行赋值。有些人不太注意这个小细节,或者根本不知道他们的区别,认为两种方式是一样的。这个误解有时可能会对程序带来影响,这里我来介绍一下这两种方式。首先我们看这么一段代码:class A{public: A(int& c) { _a = 1; }protected: in

2012-11-01 11:58:22 43147 18

原创 设计模式 - 组合模式

讲完了适配器和桥接模式,我们这次来看看组合模式(Composite)。 意图将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。 结构图从上面的结构图可以看出,Composite聚合了Component,那么也就是说Composite里面可以保存任何Component的子类,比如一个Leaf或者另外一个Co

2012-10-31 18:25:13 1015

转载 volatile 说明 (转载)

C中的volatile用法volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。例如: volatile int i=10; int j = i;

2012-10-31 15:23:25 689

原创 设计模式 - 桥接模式

桥接模式是结构型模式里面相对复杂的一种模式,但是同时也是很有用的。我们先来考虑这么一种情况(这个例子是设计模式书上的一个例子),Window是一个类,这个类用来画一个窗口。那么我们现在如果要支持XP风格和WIN7风格,应该怎么做呢?通常首先能想到的就是子类化Window,比如增加2个类:WindowsXP和Windows7。然后这2个子类可以各自实现各自的风格,这个没有问题。而且这也是常用办法

2012-10-30 18:24:09 1174 1

原创 设计模式 - 适配器模式

从这个文章开始,我们讲结构型模式。结构型模式涉及到如何组合类和对象以获得更大的结构。先从适配器模式(Adapter)开始。现实生活中,适配器的情况还是挺多的。比如我去年买了个台湾版HTC手机,但是在杭州用不了,因为这个手机的充电器的插头跟插座不匹配,然后我去电脑市场花了5快钱买了个转接头,现在就可以用了。其实这也是一个适配器的例子。这里面,现有的插座就是Adeptee,转接头就是Adapt

2012-10-29 18:49:30 1108 1

原创 Boost - 序列化 (Serialization)

程序开发中,序列化是经常需要用到的。像一些相对高级语言,比如JAVA, C#都已经很好的支持了序列化,那么C++呢?当然一个比较好的选择就是用Boost,这个号称C++准标准库的东西。什么时候需要序列化呢?举个例子,我们定义了一个class,比如:class CCar{public: void SetName(std::string& strName){m_strName = str

2012-10-24 15:24:29 46433 9

原创 设计模式-创建型模式总结

全部五种创建型模式已经介绍完毕了:工厂方法模式,抽象工厂模式,生成器模式,原型模式和单例模式。我始终认为设计模式是一些牛人总结出来的一些经验,我们不必死搬硬套。但是这些设计模式已经这么多年了,经受住了大量的考验。而且大多数人认为是合理的。那么就值得我们借鉴。我本人的日常工作中也大量的用到了这些设计模式。对于创建型模式来说,我用的比较多的是工厂方法模式,生成器模式和单例模式。我个人觉得还

2012-10-23 15:22:59 1040

原创 设计模式-单例模式

创建型模式的最后一个内容是单例模式(singleton)我相信很多人对单例模式都很熟悉,因为这个模式非常普遍。这里我也简单介绍一下。 意图保证一个类仅有一个实例,并提供一个访问它的全局访问点。 结构图单例模式的关键在于2点:1. 构造函数是私有的,也就是说除了这个单例类本身其他人是不可以创建单例类对象的;2. 有一个公有的静态函数(上图中的GetInst()

2012-10-23 14:21:39 991

原创 设计模式-原型模式

这次我们来讲一下原型模式。总体来讲原型模式还是比较简单的。 意图用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 结构图这个结构图还是挺简单的,Prototype就是产品类。和前面的抽象工厂,工厂方法等模式相比,产品类就增加了一个函数Clone()。我们还是以之前的地形例子来讲解这个模式,先给出类图我这次把CFactory当作原型模式的c

2012-10-23 13:25:32 625

原创 设计模式-生成器模式

前两个文章我介绍了工厂方法模式和抽象工厂模式,这次我来讲一些生成器模式。生成器模式我也用的比较多。5个创建型模式里面,我比较喜欢用工厂方法模式,生成器模式和单例模式。 意图将一个复杂对象的构建与它的表示分开,使得同样的构建过程可以创建不同的表示。 结构图  一眼看去是不是和抽象工厂模式有点像?是啊,我也觉得很像,有什么分别呢?别急,让我先讲一下builder 模

2012-10-22 17:31:49 1028

原创 设计模式-工厂方法模式

小弟我最近重新学习设计模式。经典就是经典,这本书我已经看了至少两遍了,这次重新再看一次,发现又体会到不同的东西了。身边很多朋友都在写博客,那么我也凑凑热闹,一来可以加深自己的学习,二来也可以给朋友们参考参考。限于本人能力有限,如果写的不好的地方请多多包涵,如果有什么理解错误的地方,欢迎指出。好了,废话少说,切入正题。先从创建型模式开始吧。我最熟悉的语言是C++,所以所有的例子都

2012-10-22 13:55:54 1089

原创 设计模式-抽象工厂模式

上次我讲了一下工厂方法模式,这次我来讲一下抽象工厂模式。其实,我在工作当中基本没有用到过抽象工厂模式。我用的比较多的是工厂方法模式。我对抽象工厂模式的理解主要来自《设计模式》这本书。同时也搜索了一些网上的文章。这里我就讲一下我自己的理解,如果讲的不好,或者根本就讲错了,请大家谅解。 抽象工厂模式 (Abstract Factory)意图提供一个创建一系列相关或相互依赖对象的

2012-10-22 13:55:36 782

COM 连接点简单例子

一个简单的连接点例子,包括一个客户程序和一个COM组件。

2014-09-05

MTA客户跨线程调用STA对象

一个简单例子,MTA客户跨线程调用STA对象,直接传递COM对象。

2014-08-26

STA客户跨线程调用STA对象

STA客户跨线程调用STA对象,使用了marshal,消息循环。

2014-08-25

STA组件简单调用(MTA客户,STA客户)

实现了一个STA组件, 然后里面有STA客户调用和MTA客户调用。

2014-08-25

OSX服务端+iphone客户端 网络通信小程序

基于OS X的一个CFNETWORK写的服务端 iphone上的一个客户端,NSStream写的。 实现了基本通信和客户端切到后台后继续保持连接。

2013-05-16

OS X网络程序简单例子

用CFNETWORK和NSStream写的一个简单通信例子,包括服务端和客户端。 用的xcode。

2013-05-16

C# 处理xml

写了几行C#处理xml的代码。非常简单的几行代码。

2013-03-01

封装了一个带上下刷新功能的table(UITableView子类)

封装了一个带上下刷新功能的table(UITableView子类)。 这样在想使用刷新功能的地方,只要使用这个类替换标准UITableView就可以了。

2012-12-28

IOS开发 Table上下拉动刷新(表头下拉,表尾上拉)

在别人的基础上修改的,在一个class里面支持表头下拉刷新,表尾上拉刷新。

2012-12-28

ios自定义table例子

一个简单的自定义table例子。自定义cell,里面可以随意画自己想要的东西。

2012-12-27

WDM驱动-完成例程

wdm驱动,完成例程的一个例子。包含3部分: 1. 目录1是一个功能驱动, 2. 目录2是一个过滤驱动,附在#1上面, 3. 另外还有一个测试代码。 直接跑测试代码,就可以看到完成例程的效果。

2012-12-21

wdm驱动-过滤驱动

wdm驱动,包括功能驱动和附在它上面的过滤驱动(上层过滤驱动)。一个很简单的例子。

2012-12-19

WDM驱动多个设备对象

WDM驱动,AddDevice里面多次调用IoCreateDevice创建多个设备对象。遍历整个设备链。

2012-12-14

WDM驱动取消例程

StartIo例程的基本例子,包括如何取消irp

2012-12-13

WDM驱动StartIo例程

用WDM实现的StartIo例子。将多个线程创建的IRP串行化处理。

2012-12-12

异步IRP例子

一个WDM驱动,使用异步IRP。caller通过异步方式打开驱动设备,然后使用WaitForSingleObject查看驱动是否已经完成请求。

2012-11-26

使用DeviceIoControl进行通信(直接方式)

一个WDM驱动,然后caller使用DeviceIoControl进行和驱动的通信。输出buffer使用METHOD_IN_DIRECT进行数据传输。

2012-11-23

缓冲区方式WDM驱动例子

使用缓冲区方式(DO_BUFFERED_IO)进行用户模式和内核模式地址的数据交互。包括驱动程序和用户模式的测试程序。用DDK编译驱动,VS2008编译测试程序。

2012-11-22

一个简单的WDM驱动例子

一个简单的WDM驱动例子,包括驱动和用户模式的调用测试。(例子来自于《windows驱动开发技术详解》,只是稍微做了一些改变)

2012-11-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除