1. 程式人生 > >C語言和設計模式(享元模式)

C語言和設計模式(享元模式)

【 宣告:版權所有,歡迎轉載,請勿用於商業用途。  聯絡信箱:feixiaoxing @163.com】

    享元模式看上去有點玄乎,但是其實也沒有那麼複雜。我們還是用示例說話。比如說,大家在使用電腦的使用應該少不了使用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模式也叫享元模式,是構造型模式之一,它通過與其他類似物件共享資料來減小記憶體佔用。 換句話說就是通過共享的方式高效地支援大量細粒度的物件。 享元模式的結構: 享元模式的角色和職責: