原创 [C++設計模式] iterator 迭代器模式

迭代器模式定義:提供一種方法順序訪問一個聚合對象中各個元素,而又不需要暴露該對象。 迭代器分內部迭代器和外部迭代器,內部迭代器與對象耦合緊密,不推薦使用。外部迭代器與聚合容器的內部對象松耦合,推薦使用。 迭代器模式就是分離了集合對象的遍歷

原创 google protocol buffer的原理和使用(四)

有個電子商務的系統(假設用C++實現),其中的模塊A需要發送大量的訂單信息給模塊B,通訊的方式使用socket。 假設訂單包括如下屬性: --------------------------------   時間:time(用整數表示)

原创 google protocol buffer的原理和使用(一)

 一、簡單的介紹      Protocol buffers是一個用來序列化結構化數據的技術,支持多種語言諸如C++、Java以及Python語言,

原创 常用哈希函數的比較及其C語言實現

基本概念 所謂完美哈希函數,就是指沒有衝突的哈希函數,即對任意的 key1 != key2 有h(key1) != h(key2)。 設定義域爲X,

原创 [C++設計模式] composite 組合模式

組合(Composite)模式的其它翻譯名稱也很多,比如合成模式、樹模式等等。在《設計模式》一書中給出的定義是:將對象以樹形結構組織起來,以達成“部

原创 select、poll、epoll之間的區別總結[整理]

select,poll,epoll都是IO多路複用的機制。I/O多路複用就通過一種機制,可以監視多個描述符,一旦某個描述符就緒(一般是讀就緒或者寫就緒),能夠通知程序進行相應的讀寫操作。但select,poll,epoll本質上都是同步I

原创 google protocol buffer的原理和使用(三)

介紹下怎麼反序列化GoogleBuffer數據,並在最後提供本系列文章中所用到的代碼整理供下載。      上一篇文章介紹了怎樣將數據序列化到了ad

原创 [C++設計模式]template 模板方法模式

模板法模式:定義一個操作中的算法骨架,而將一些步驟延遲到子類中。 按照《headfirst 設計模式》的例子,煮茶和煮咖啡的算法框架(流程)是一樣的,只是有些算法的實現是不一樣的,有些是一樣的。 我們可以將共同的算法框架封裝爲一個虛基類,

原创 [C++設計模式] state 狀態模式

《head first 設計模式》中的例子很不錯,想製造一個自動交易的糖果機,糖果機有四個狀態:投入錢不足,投入錢足夠,出售糖果,糖果售罄。糖果機的當前狀態處於其中不同的狀態時,它針對同一個操作的反映動作也不同。傳統面向過程編程會套用if

原创 爲什麼設計模式在C++社區沒有Java社區流行?

我們發現設計模式在Java社區很流行,但是在C++社區卻沒有那麼被關注,甚至有點被排斥,究竟是什麼原因造成這個差異的呢?   (1)C++內存需要自己管理,所以有些模式在C++裏使用不是那麼方便,但是Java不用關心內存,所以在Java裏

原创 g++ GNU g++常用編譯選項用法

http://blog.csdn.net/mtawaken/article/details/7416332 http://blog.csdn.net/poechant/article/details/6641783 http://www.

原创 [C++設計模式] strategy 策略模式

按照陳碩老師的觀點,c++裏有面向過程編程,面向對象編程,基於對象編程(面向接口編程)和泛型編程,四種思路都各有其適用場景。 面向過程編程是沿襲C的結構化編程思路,OOP是C++的核心,也是現代高級編程語言的核心。 c++的OO核心是繼承

原创 [C++設計模式]observer 觀察者模式

有這麼一種鬆耦合的需求: 有一些類的對象對類A對象的狀態變化很感興趣,不會改變類A的對象,也不會被類A的對象改變,想以一種較小的代價觀察對類A對象狀態變化。 下面的幾種方式也能實現上述目的 (1)通過類的繼承來共同管理和維護一些感興趣的數

原创 [C++設計模式] adapter 適配器模式

STL中,stack對vector或者雙端隊列進行封裝,提供stack操作的接口就是典型的適配器模式。 將一個類的接口轉換成客戶希望的另外一個接口,就是適配器模式。 使用適配器模式有以下優點: 降低了去實現一個功能點的難度,可以對現有的類

原创 [C++設計模式] proxy 代理模式

代理模式:爲其他對象提供一種代理以控制對這個對象的訪問。 Proxy: 保存一個引用使得代理可以訪問實體。若RealSubject和Subject的接口相同,Proxy會引用Subject,就相當於在代理類中保存一個Subject指針,