一. 概述
在物件導向系統的設計何實現中,建立物件是最為常見的操作。
這裡面就有乙個問題:如果乙個應用程式使用了太多的物件,就會造成很大的儲存開銷。特別是對於大量輕量級(細粒度)的物件,比如在文件編輯器的設計過程中,我們如果沒有為字母建立乙個物件的話,系統可能會因為大量的物件而造成儲存開銷的浪費。
例如乙個字母「a」在文件**現了100000次,而實際上我們可以讓這一萬個字母「a」共享乙個物件,當然因為在不同的位置可能字母「a」有不同的顯示效果(例如字型和大小等設定不同),在這種情況我們可以為將物件的狀態分為「外部狀態」和「內部狀態」,將可以被共享(不會變化)的狀態作為內部狀態儲存在物件中,而外部物件(例如上面提到的字型、大小等)我們可以在適當的時候將外部物件最為引數傳遞給物件(例如在顯示的時候,將字型、大小等資訊傳遞給物件)。
二. 享元模式
定義:運用共享技術有效地支援大量細粒度的物件。
結構圖如下:
flyweight:所有具體享元類的父類,或介面
concreteflyweight:具體享元類,實現具體的操作
unshareconcreteflyweight:不需要共享的子類
flyweightfactory:合理的建立並管理享元類
**如下:
[cpp] view plaincopyprint?//享元類
class flyweight
virtual void operation(const string& extrinsicstate) {}
string getintrinsicstate()
protected:
flyweight(string intrinsicstate)
private:
string _intrinsicstate;
};
//具體享元類
class concreteflyweight:public flyweight
~concreteflyweight() {}
//實現介面
void operation(const string& extrinsicstate)
} flyweight* fn = new concreteflyweight(key);
_fly.push_back(fn);
return fn;
} private:
vector _fly;
};
//測試
int main(int argc,char* ar**)
//享元類
class flyweight
virtual void operation(const string& extrinsicstate) {}
string getintrinsicstate()
protected:
flyweight(string intrinsicstate)
private:
string _intrinsicstate;
};//具體享元類
class concreteflyweight:public flyweight
~concreteflyweight() {}
//實現介面
void operation(const string& extrinsicstate)
~flyweightfactory() {}
//確保合理的共享 flyweight
flyweight* getflyweight(const string& key)
}flyweight* fn = new concreteflyweight(key);
_fly.push_back(fn);
return fn;
}private:
vector _fly;
};//測試
int main(int argc,char* ar**)
三. 說明
1. 享元工廠類是重點,因為它建立並管理享元物件,對沒有的物件它會建立,對已有的物件它會提供乙個已建立的例項。
2. 可以想像有乙個物件池,裡面都是一些享元類,享元工廠的作用就是從物件池裡取物件。
3. 它的目的是大幅度地減少需要例項化的類的數量。
摘自 lwbeyond
設計模式C 描述
一.定義 介面卡模式將乙個類的介面轉換成客戶希望的另外乙個介面,使得原本由於介面不相容而不能一起工作的那些類可以一起工作。adapter 模式的兩種類別 類模式和物件模式。二.舉例說明 實際中,我們為了完成某項工作購買了乙個第三方的庫來加快開發。這個庫可能都是一些.dll檔案,這就帶來了乙個問題!我...
設計模式C 描述
一.概念 單例模式 其意圖是保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。cpp class csingleton 私有建構函式,防止例項化 private csingleton 私有靜態指標變數,指向類的唯一例項 private static csingleto...
設計模式 簡介 C 描述
second60 20180424 設計模式,在物件導向設計語言中,是非常重要的思想。無論是架構設計,還是在平常的功能開發,用了設計模式,會如虎添冀。如擴充套件性方面,一些設計模式,新加乙個類繼承原有父類,即可不修改 的情況,支援了新的功能。下面,我會歸納總結下23種設計模式,網上也有很多例子,盡量...