設計模式C 描述

2021-12-30 00:50:37 字數 2149 閱讀 8948

一. 概述

在物件導向系統的設計何實現中,建立物件是最為常見的操作。

這裡面就有乙個問題:如果乙個應用程式使用了太多的物件,就會造成很大的儲存開銷。特別是對於大量輕量級(細粒度)的物件,比如在文件編輯器的設計過程中,我們如果沒有為字母建立乙個物件的話,系統可能會因為大量的物件而造成儲存開銷的浪費。

例如乙個字母「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種設計模式,網上也有很多例子,盡量...