C語言和設計模式(觀察者模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    觀察者模式可能是我們在軟體開發中使用得比較多的一種設計模式。為什麼這麼說?大家可以聽我一一到來。我們知道,在windows的軟體中,所有的界都是由視窗構成的。對話方塊是視窗,菜單是視窗,工具列也是視窗。那麼這些視窗,在很多情況下要對一些共有的資訊進行處理。比如說,視窗的放大,視窗的減小等等。面對這一情況,觀察者模式就是不錯的一個選擇。   

C語言和設計模式(備忘錄模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    備忘錄模式的起源來自於撤銷的基本操作。有過word軟體操作經驗的朋友,應該基本上都使用過撤銷的功能。舉個例子,假設你不小心刪除了好幾個段落的文字,這時候你應該怎麼辦呢?其實要做的很簡單,單擊一些【撤銷】就可以全部搞定了。撤銷按鈕給我們提供了一次反悔的機會。    既然是撤銷,那麼我們在進行某種動作的時候,就應該建立一個相應的撤銷操作?這個撤銷操作的相關定義可以是這樣的。typedef

C語言和設計模式(解譯器模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】        解譯器模式雖然聽上去有些費解,但是如果用樣本說明一下就不難理解了。我們知道在C語言中,關於變數的定義是這樣的:一個不以數字開始的由字母、數字和底線構成的字串。這種形式的運算式可以用狀態自動機解決,當然也可以用解譯器的方式解決。typedef struct _Interpret{ int type; void* (*process)(void* pData, int*

C語言和設計模式(命令模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    命令模式的目的主要是為了把命令者和執行者分開。老規矩,舉個範例吧。假設李老闆是一家公司的頭兒,他現在讓他的秘書王小姐去送一封信。王小姐當然不會自己親自把信送到目的地,她會把信交給郵局來完成整個投遞的全過程。現在,我們就對投遞者、命令、發令者分別作出定義。    首先定義post的相關資料。typedef struct _Post{ void (*do)(struct _Post*

C語言和設計模式(狀態模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    狀態模式是協議互動中使用得比較多的模式。比如說,在不同的協議中,都會存在啟動、保持、中止等基本狀態。那麼怎麼靈活地轉變這些狀態就是我們需要考慮的事情。假設現在有一個state,typedef struct _State{ void (*process)(); struct _State* (*change_state)();}State; 

C語言和設計模式(策略模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    策略模式就是用統一的方法介面分別對不同類型的資料進行訪問。比如說,現在我們想用pc看一部電影,此時應該怎麼做呢?看電影嘛,當然需要各種播放電影的方法。rmvb要rmvb格式的方法,avi要avi的方法,mpeg要mpeg的方法。可是事實上,我們完全可以不去管是什麼檔案格式。因為播放器對所有的操作進行了抽象,不同的檔案會自動調用相應的存取方法。typedef struct

C語言和設計模式(裝飾模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    裝飾模式是比較好玩,也比較有意義。其實就我個人看來,它和責任鏈還是蠻像的。只不過一個是比較判斷,一個是迭代處理。裝飾模式就是那種迭代處理的模式,關鍵在哪呢?我們可以看看資料結構。typedef struct _Object{ struct _Object* prev; void (*decorate)(struct _Object* pObject);}Object;   

C語言和設計模式(中介者模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    中介者模式,聽上去有一點陌生。但是,只要我給朋友們打個比方就明白了。早先自由戀愛沒有現在那麼普遍的時候,男女之間的相識還是需要通過媒婆之間才能相互認識。男孩對女方有什麼要求,可以通過媒婆向女方提出來;當然,女方有什麼要求也可以通過媒婆向男方提出來。所以,中介者模式在我看來,就是媒婆模式。typedef struct _Mediator{ People* man;

C語言和設計模式(適配器模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】     現在的生活當中,我們離不開各種電子工具。什麼膝上型電腦、手機、mp4啊,都離不開充電。既然是充電,那麼就需要用到充電器。其實從根本上來說,充電器就是一個個普通的適配器。什麼叫適配器呢,就是把220v、50hz的交流電壓編程5~12v的直流電壓。充電器就幹了這麼一件事情。    那麼,這樣的一個充電適配器,我們應該怎麼用c++描述呢?    class

C語言和設計模式(建造者模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】   

C語言和設計模式(橋接模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】   

用彙編的眼光看C++(之虛函數)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】      虛函數是物件導向設計中的一個重要內容。它的出現使得我們只需要相同的介面函數,並可以得到不同的產生結果。但是有些朋友卻知其然,不知其所以然,為什麼會出現這樣的結果,我們可以用一段代碼說明問題。首先,我們先定義兩個基本類型,一個是employee,一個是manager,看過前面一片部落格的朋友應該都有點印象:class employee{public:employee() {

用彙編的眼光看C++(之類靜態變數、靜態函數)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    看過設計模式的朋友都知道,我們在設計單件模式的時候離不開類的靜態函數。和類的成員變數不同,類的靜態變數屬於全部類對象資料;同樣和類的成員函數不同,類的靜態函數屬於全部類函數共有。這句話讀來想來有一些拗口,不過沒有關係,我們可以通過一段代碼來說明問題。    (1)靜態變數    老規矩,我們首先對類進行初步定義,如下所示:class employee{public:employee()

用彙編的眼光看C++(之特殊函數)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    

C語言和設計模式(訪問者模式)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    不知不覺當中,我們就到了最後一種設計模式,即訪問者模式。訪問者模式,聽上去複雜一些。但是,這種模式用簡單的一句話說,就是不同的人對不同的事物有不同的感覺。比如說吧,豆腐可以做成麻辣豆腐,也可以做成臭豆腐。可是,不同的地方的人未必都喜歡這兩種豆腐。四川的朋友可能更喜歡辣豆腐,江浙的人就可能對臭豆腐更喜歡一些。那麼,這種情況應該怎麼用設計模式表達呢?typedef struct _Tofu{

用彙編的眼光看C++(之模板類)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    如果類是一種確定的資料類型,那麼模板就是一種對類的抽象。假設有這麼一種類,它需要進行資料的計算,而且類型還很多,那麼我們可能就要針對不同類型的資料定義不同的類。我們可以用下面一段代碼說明問題:class int_process{int a;int b;public:int_process(int m, int n):a(m), b(n) {}~int_process() {}int

用彙編的眼光看c++(之模板函數)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】     如果說模板類定義的是一種資料類型,那麼模板函數定義的就是一種函數。既然是函數,那麼就有輸入資料和輸出資料。和模板類的概念差不多,模板函數的初衷也是為了在函數操作上抽取共同的特性,屏蔽的是類型的不同和差異。我們可以通過下面一個簡單的代碼說明問題:int int_compare(int a, int b){return a > b ? a : b;}double

用彙編的眼光看C++(之class構造、析構)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】      前面我們討論基本上都是C語言的內容,還沒有真正觸及到C++的相關知識。從這篇部落格之後,我們將會更多觸及類的內容。類的屬性很多,今天我們討論主要就是建構函式、解構函式。        (1)如果沒有建構函式、解構函式呢?class apple{public:void print() const {return;}};  

用彙編的眼光看C++(之拷貝、賦值函數)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    拷貝建構函式和複製函數是類裡面比較重要的兩個函數。兩者有什麼區別呢?其實也很簡單,我們可以舉個例子,加入有這樣一個類的定義:class apple{public:apple() { printf("apple()!\n");}apple(apple& a) { printf("copy apple()!\n");}apple& operator=(apple&

用彙編的眼光看C++(之類繼承)

【 聲明:著作權,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】    繼承是類的一個基本屬性,可是在類的繼承過程中,函數是怎麼初始化?怎麼析構的呢?我們不妨看看下面這樣的一段代碼?class employee{public:employee() { printf("employee()!\n");}~employee() { printf("~employee()!\n");}};class manager : public

總頁數: 4314 1 .... 1617 1618 1619 1620 1621 .... 4314 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.