C語言和設計模式(享元模式)
享元模式看上去有點玄乎,但是其實也沒有那麼複雜。我們還是用示例說話。比如說,大家在使用電腦的使用應該少不了使用WORD軟體。使用WORD呢, 那就少不了設定模板。什麼模板呢,比如說標題的模板,正文的模板等等。這些模板呢,又包括很多的內容。哪些方面呢,比如說字型、標號、字距、行距、大小等等。
typedef struct _Font
{
int type;
int sequence;
int gap;
int lineDistance;
void (*operate)(struct _Font* pFont);
}Font;
上面的Font表示了各種Font的模板形式。所以,下面的方法就是定製一個FontFactory的結構。typedef struct _FontFactory { Font** ppFont; int number; int size; Font* GetFont(struct _FontFactory* pFontFactory, int type, int sequence, int gap, int lineDistance); }FontFactory;
這裡的GetFont即使對當前的Font進行判斷,如果Font存在,那麼返回;否則建立一個新的Font模式。
Font* GetFont(struct _FontFactory* pFontFactory, int type, int sequence, int gap, int lineDistance) { int index; Font* pFont; Font* ppFont; if(NULL == pFontFactory) return NULL; for(index = 0; index < pFontFactory->number; index++) { if(type != pFontFactory->ppFont[index]->type) continue; if(sequence != pFontFactory->ppFont[index]->sequence) continue; if(gap != pFontFactory->ppFont[index]->gap) continue; if(lineDistance != pFontFactory->ppFont[index]->lineDistance) continue; return pFontFactory->ppFont[index]; } pFont = (Font*)malloc(sizeof(Font)); assert(NULL != pFont); pFont->type = type; pFont->sequence = sequence; pFont->gap = gap; pFont->lineDistance = lineDistance; if(pFontFactory-> number < pFontFactory->size) { pFontFactory->ppFont[index] = pFont; pFontFactory->number ++; return pFont; } ppFont = (Font**)malloc(sizeof(Font*) * pFontFactory->size * 2); assert(NULL != ppFont); memmove(ppFont, pFontFacoty->ppFont, pFontFactory->size); free(pFontFactory->ppFont); pFontFactory->size *= 2; pFontFactory->number ++; ppFontFactory->ppFont = ppFont; return pFont; }
相關推薦
C語言和設計模式(享元模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 享元模式看上去有點玄乎,但是其實也沒有那麼複雜。我們還是用示例說話。比如說,大家在使用電腦的使用應該少不了使用WORD軟體。使用WORD呢, 那就少不了設定模板。
1014 C語言程序設計教程(第三版)課後習題6.4
content += 教程 print ons ont c語言程序設計 lld cnblogs 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字。 輸入 n 輸出 和 樣例輸入 5 樣例輸出 153 1 #include "stdio.h"
1013: C語言程序設計教程(第三版)課後習題6.3
其中a是一個數字 blog += color turn sam c語言程序 [] c語言 題目描述 求Sn=a+aa+aaa+…+aa…aaa(有n個a)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 a 輸出 和 樣
1024: C語言程序設計教程(第三版)課後習題7.3
c語言程序 print clas 程序 scanf col class pri printf 題目描述 求一個3×3矩陣對角線元素之和。 輸入 矩陣 輸出 主對角線 副對角線 元素和 樣例輸入 1 2 3 1 1 1 3 2 1 樣例輸出 3 7 1 #include
1046: C語言程序設計教程(第三版)課後習題10.4
con n) 順序 調整 style char ++ 輸入數據 include 題目描述 有n個整數,使前面各數順序向後移m個位置,最後m個數變成前面m個數,見圖。寫一函數:實現以上功能,在主函數中輸入n個數和輸出調整後的n個數。 輸入 輸入數據的個數n n個整數 移動的位
C#設計模式(12)——享元模式(Flyweight Pattern)
{0} dict 實例方法 通過 總結 享元模式 如何 相同 string類 一、引言 在軟件開發過程,如果我們需要重復使用某個對象的時候,如果我們重復地使用new創建這個對象的話,這樣我們在內存就需要多次地去申請內存空間了,這樣可能會出現內存使用越來越多的情況,這樣的問題
設計模式之享元模式(C++)
設計模式之享元模式 享元模式,運用共享技術有效地支援大量細粒度的物件。面向物件技術可以很好地解決一些靈活性或擴充套件性問題,但在很多情況下需要在系統中增加類和物件的個數。當物件數量太多時,將導致執行代價過高,帶來效能下降等問題。享元模式正式為了解決這依賴問題而誕
C語言和設計模式(繼承 封裝 多型)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 記得還在我們大學C++第一門課的時候,老師就告訴我們說,C++是一門面向物件的語言。C++有三個最重要的特點,即繼承、封裝、多型。等到後來隨著編碼的增多和工作經驗的積
C語言和設計模式(工廠模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 工廠模式是比較簡單,也是比較好用的一種方式。根本上說,工廠模式的目的就根據不同的要求輸出不同的產品。比如說吧,有一個生產鞋子的工廠,它能生產皮鞋,也能生產膠鞋。如果用
C語言和設計模式(之單例模式)
有過面試經驗的朋友,或者對設計模式有點熟悉的朋友,都會對單件模式不陌生。對很多面試官而言,單件模式更是他們面試的保留專案。其實,我倒認為,單件模式算不上什麼設計模式。最多也就是個技巧。 單件模式要是用C++寫,一般這麼寫。 #include &l
23種設計模式之享元模式(結構型,7 Flyweight,c++實現)
程式碼實現:#include<iostream>#include<list>#include<string>#include<map>usingnamespace std;classPerson{public:Person(st
C語言和設計模式(命令模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 命令模式的目的主要是為了把命令者和執行者分開。老規矩,舉個範例吧。假設李老闆是一家公司
15、C語言和設計模式(介面卡模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 現在的生活當中,我們離不開各種電子工具。什麼膝上型電腦、手機、mp4啊,都離不開充電。既然是充電,那麼就需要用到充電器。其實從根本上來說,充電器就是一個個普通
C語言和設計模式(觀察者模式)
【 宣告:版權所有,歡迎轉載,請勿用於商業用途。 聯絡信箱:feixiaoxing @163.com】 觀察者模式可能是我們在軟體開發中使用得比較多的一種設計模式。為什麼這麼說?大家可以聽我一一到來。我們知道,在windows的軟體中,所有的界都是由視窗構成的。對話
Head First設計模式之享元模式(蠅量模式)
logs sign face isp ria reat 定義 ogr sans 一、定義 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的
(@WhiteTaken)設計模式學習——享元模式
ken import 都是 什麽 com str 字段 浪費 -- 繼續學習享元模式。。。 乍一看到享元的名字,一頭霧水,學習了以後才覺得,這個名字確實比較適合這個模式。 享元,即共享對象的意思。 舉個例子,如果制作一個五子棋的遊戲,如果每次落子都實例化一個對象的話
設計模式,享元模式(7)
turn actually 一個 享元模式 rom imp import pat 兩個 享元模式(Flyweight Pattern)主要用於減少創建對象的數量,以減少內存占用和提高性能。這種類型的設計模式屬於結構型模式,它提供了減少對象數量從而改善應用所需的對象結構的方式
用最簡單的例子說明設計模式(三)之責任鏈、建造者、適配器、代理模式、享元模式
def dap CA 抽象 創建 tcl cte clas eth 責任鏈模式 一個請求有多個對象來處理,這些對象是一條鏈,但具體由哪個對象來處理,根據條件判斷來確定,如果不能處理會傳遞給該鏈中的下一個對象,直到有對象處理它為止 使用場景 1)有多個對象可以處理同
設計模式---對象性能模式之享元模式(Flyweight)
ret 大量 根據 利用 問題 字母 只讀 時代 帶來 一:概念 通過與其他類似對象共享數據來減少內存占用 如果一個應用程序使用了太多的對象, 就會造成很大的存儲開銷。 特別是對於大量輕量級 (細粒度)的對象,比如在文檔編輯器的設計過程中,我們如果為每個字母
設計模式之享元模式(蠅量模式)
設計模式之享元模式(蠅量模式) 1. 什麼是享元模式 Flyweight模式也叫享元模式,是構造型模式之一,它通過與其他類似物件共享資料來減小記憶體佔用。 換句話說就是通過共享的方式高效地支援大量細粒度的物件。 享元模式的結構: 享元模式的角色和職責: