摘要:
大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服务器就将处于一个不停的创建线程和销毁线程的状态。这笔开销是不可忽略的,尤其是线程执行的时间非常非常短的情况。 线程池就是为了解决上述问题的,它的实现原理是这样的:在应用程序启动之后 阅读全文
摘要:
最近想转到Linux下的C\C++编程,但是当前工作还是以在Window下的C++开发为主,偶尔也在Linux和Mac OS开发一些小工具,但是就是开发这些小工具让我有想转到Linux下C\C++编程的念头。但是工作还是要做的,不然没得饭吃啊,所以就只能利用下班时间及周末时间研究一下,先熟悉熟悉,由于大学木有认真的学习过C语言,一直以为C语言里有bool类型,直到工作后才知道C语言中木有这个类型,o(╯□╰)o。。。,所以就从C语言学起,我已经学过C++了,为什么还要从头来学C语言呢,我从事C++开发也就一年多一点,C++博大精深,所以我连半个C++程序员都算不上。废话少说了,为将来转到L.. 阅读全文
摘要:
原型模式定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式解析: 原型模式是一种创建型设计模式,该模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。它主要面对的问题为:"某些结构复杂的对象"的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。 UML图如下: 简单示例代码如下://基类class Prototype{public: virtual ~Prototyp 阅读全文
摘要:
模板方法模式定义: 定义一个操作中的算法骨架,而将一些实现步骤延迟到子类当中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。模板方法解析: 模板方法模式是比较简单的一种设计模式,但是它却是代码复用的一项基本的技术,在类库中尤其重要,它遵循“抽象类应当拥有尽可能多的行为,应当拥有尽可能少的数据”的重构原则。作为模板的方法要定义在父类中,在方法的定义中使用到抽象方法,而只看父类的抽象方法是根本不知道怎样处理的,实际做具体处理的是子类,在子类中实现具体功能,因此不同的子类执行将会得出不同的实现结果,但是处理流程还是按照父类定制的方式。这就是模板方法的要义所在,制定算法骨.. 阅读全文
摘要:
策略模式定义: 定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。策略模式解析: 策略模式是处理算法的不同变体的一种行为模式,通过在抽象策略中定义算法接口或封装算法标识,实现该抽象策略的具体子类成为一个单独的算法,即具体策略。策略模式使用多个类来区别不同的行为,使用策略模式避免暴露复杂的、与算法相关的内部数据结构。当一个类中的操作以多个条件分支语句的形式出现的时候,可以使用策略模式将相关的条件分支移入各自的具体策略类中以代替这些条件语句,从而减少系统处理的复杂度。 优点: 1、 提供了一种替代继承的方法,而且既保持了继... 阅读全文
摘要:
发布/订阅模式定义: 又称为观察者模式,定义对象间的一种一对多的依赖关系,一个发布者可以对应多个订阅者,当发布者发生变化的时候,他可以将消息一一通知给所有的订阅者当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。发布/订阅模式解析: UML图如下,这里发布者IPublisher提供依赖于它的订阅者的添加add和删除remove操作,同时提供一个依赖于它的所有订阅者同步的操作notify。订阅者需要提供一个update操作,当发布者发出notify通知所有订阅者时,进行调用update。 简单代码示例如下://订阅者基类class ISubsc... 阅读全文
摘要:
我们知道,一般的,每个类只初始化自己的直接基类。但是在有虚基类存在的时候,这个初始化策略就会失败。因为如果使用这种初始化策略,就会可能多次初始化虚基类,类将沿着包含该虚基类的每个继承路径初始化。所以,为了解决这个重复初始化问题,需要从具有虚基类的类继承的类对初始化进行特殊处理。就是在虚派生中,由最底层派生类的构造函数初始化虚基类。 下面,我们来看一个例子,其继承关系是这样的,有三个基类,分别是人类Human、行为Behavior和非人类行为NonhumanFeature,男人Man和女人Woman公有虚拟继承自Human,人类行为HumanBehavior公有虚拟继承行为Behavior... 阅读全文
摘要:
单例模式定义: 只有一个实例,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。单例模式特点: 1、这个类只能有一个实例 2、这个类必须自行创建这个实例 3、这个类必须自行向整个系统提供这个实例单例模式解析: 下面是单例模式的UML图: 下面是简单代码实现://单例模式class Singleton{public: static Singleton* CreateInstance(); static void DestoryInstance(); ~Singleton... 阅读全文
摘要:
适配器模式定义: 将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。适配器模式分类: 1、类适配器模式 这种适配器模式下,适配器继承自已实现的类(一般多重继承)。 2、对象适配器模式 在这种适配器模式中,适配器容纳一个它包裹的类的实例。在这种情况下,适配器调用被包裹对象的物理实体。适配器模式解析: 引例:我有一台笔记本电脑,有一个鼠标,笔记本有4个USB接口,没有PS2接口;鼠标却是PS2接口的。我没有办法把鼠标插入笔记本电脑中,我又不能换一台有PS2接口的笔记本电脑,也不能去买一个有... 阅读全文
摘要:
参考<<C++GUIProgramming withQt4>>中文版第二版中的例子:城市距离。具体描述请看书本,主要重写继承自QAbstractTableModel的CityModel,该模型底层的数据是一个QStringList类型的对象和一个QVector<int>类型的对象。前者用于保存城市的名字,后者保存城市之间的距离。 citymodel.h文件:#ifndef CITYMODEL_H#define CITYMODEL_H#include <QAbstractTableModel>#include <QVector>#inc 阅读全文