0%

市面上的“设计模式“书籍文章,皆针对Java/C++/C#等面向对象语言,似乎离开了面向对象的种种特性,设计模式就无法实现,没有用武之地了。

是这样吗?设计模式的概念是从建筑领域引入的,本身从没歧视过面向过程编程语言,它只是对一类问题的普遍解决方案而已。面向对象语言因为有类、多态等特点,使得开发者们容易达到:隐藏细节、封装变化,而这与设计模式的目的比较一致,所以大师们爱把设计模式与面向对象语言二位一体的使用。然而,存在即合理,C语言直到今日仍然在大型软件工程中担纲主角,其种种设计方法其实与我们通常见到的设计模式本质是相同的。例如nginx这个纯C语言写就的的高性能WEB服务器,就有许多地方使用到了市面书籍提到的设计模式。下面通过nginx源码来看看C语言是怎么做的。当然,UML图都是我根据代码意图所画,并不准确(C语言真没法画UML),只用于方便理解,呵呵。

阅读全文 »

googletest是一个用来写C++单元测试的框架,它是跨平台的,可应用在windows、Linux、Mac等OS平台上。下面,我来说明如何使用最新的1.6版本gtest写自己的单元测试。

本文包括以下几部分:
1、获取并编译googletest(以下简称为gtest);
2、如何编写单元测试用例;
3、如何执行单元测试。
4、google test内部是如何执行我们的单元测试用例的。

阅读全文 »

最近两年C用得多了,C++有些生疏,又常常用Python,或者阅读些Java的代码,感觉C的开发者们由于C语言在软件工程上的先天缺陷,导致开发效率不高,所以决定拿出C++来看看用用,准备把libevent封装出一个类ACE的C++实现,首先来复读下C++对象模型吧。要了解new一个object的成本,最主要的就是知道,编译器会给对象分配多少内存,知道C++的对象模型无疑就了解这一点了。

阅读全文 »

哲学是什么?学校里的哲学定义我不认同。哲学不是一种知识,是无法“学”到的,大学里的哲学专业和哲学课,只是去研究别人的某些抽象总结出的哲学观点,更象考古学,而我的理解不同:哲学一定是针对自己的,仅可以从别人那里了解一些观点事例,它们可能会较深程度的融入自己的思想中,形成自己的新的哲学思想。­

阅读全文 »