日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

18享元模式

發(fā)布時(shí)間:2024/9/27 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 18享元模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


1享元模式的核心內(nèi)容是(對(duì)下面代碼的總結(jié))

A:一個(gè)網(wǎng)站的抽象類

B:一個(gè)用于實(shí)例化網(wǎng)站的類

C:由一個(gè)工廠類維護(hù)網(wǎng)站的創(chuàng)建,并將站點(diǎn)管理存儲(chǔ)到Map

2享元模式的作用:統(tǒng)一管理站點(diǎn)的創(chuàng)建。

3享元模式具體描述

享元模式:FLYWEIGHT在拳擊比賽中指最輕量級(jí)。

享元模式以共享的方式高效的支持大量的細(xì)粒度對(duì)象。

享元模式能做到共享的關(guān)鍵是區(qū)分內(nèi)蘊(yùn)狀態(tài)和外蘊(yùn)狀態(tài)。

內(nèi)蘊(yùn)狀態(tài)存儲(chǔ)在享元內(nèi)部,不會(huì)隨環(huán)境的改變而有所不同。

外蘊(yùn)狀態(tài)是隨環(huán)境的改變而改變的。外蘊(yùn)狀態(tài)不能影響內(nèi)蘊(yùn)狀態(tài),

它們是相互獨(dú)立的。將可以共享的狀態(tài)和不可以共享的狀態(tài)從常規(guī)類中區(qū)分開來,

將不可以共享的狀態(tài)從類里剔除出去。客戶端不可以直接創(chuàng)建被共享的對(duì)象,

而應(yīng)當(dāng)使用一個(gè)工廠對(duì)象負(fù)責(zé)創(chuàng)建被共享的對(duì)象。

享元模式大幅度的降低內(nèi)存中對(duì)象的數(shù)量。

?

每天跟MM發(fā)短信,手指都累死了,最近買了個(gè)新手機(jī),

可以把一些常用的句子存在手機(jī)里,要用的時(shí)候,直接拿出來

在前面加上MM的名字就可以發(fā)送了,再不用一個(gè)字一個(gè)字敲了。

共享的句子就是FlyweightMM的名字就是提取出來的外部特征,

根據(jù)上下文情況使用。

4享元模式類圖

5.代碼:

#include <iostream>

#include <list>

#include <string>

#include <map>

using namespace std;

?

//享元模式:FLYWEIGHT在拳擊比賽中指最輕量級(jí)。

//享元模式以共享的方式高效的支持大量的細(xì)粒度對(duì)象。

//享元模式能做到共享的關(guān)鍵是區(qū)分內(nèi)蘊(yùn)狀態(tài)和外蘊(yùn)狀態(tài)。

//內(nèi)蘊(yùn)狀態(tài)存儲(chǔ)在享元內(nèi)部,不會(huì)隨環(huán)境的改變而有所不同。

//外蘊(yùn)狀態(tài)是隨環(huán)境的改變而改變的。外蘊(yùn)狀態(tài)不能影響內(nèi)蘊(yùn)狀態(tài),

//它們是相互獨(dú)立的。將可以共享的狀態(tài)和不可以共享的狀態(tài)從常規(guī)類中區(qū)分開來,

//將不可以共享的狀態(tài)從類里剔除出去??蛻舳瞬豢梢灾苯觿?chuàng)建被共享的對(duì)象,

//而應(yīng)當(dāng)使用一個(gè)工廠對(duì)象負(fù)責(zé)創(chuàng)建被共享的對(duì)象。

//享元模式大幅度的降低內(nèi)存中對(duì)象的數(shù)量。

//

//每天跟MM發(fā)短信,手指都累死了,最近買了個(gè)新手機(jī),

//可以把一些常用的句子存在手機(jī)里,要用的時(shí)候,直接拿出來

//,在前面加上MM的名字就可以發(fā)送了,再不用一個(gè)字一個(gè)字敲了。

//共享的句子就是FlyweightMM的名字就是提取出來的外部特征,

//根據(jù)上下文情況使用。

?

//網(wǎng)站的抽象函數(shù)

class WebSite

{

public:

??? virtual void use() = 0;//預(yù)留接口實(shí)現(xiàn)功能

};

?

//用于創(chuàng)建網(wǎng)站

class ConcreteWebSite :public WebSite

{

private:

??? string name;

public:

??? ConcreteWebSite(string name)//實(shí)例化

??? {

??????? this->name = name;

??? }

??? void use()

??? {

??????? cout << "網(wǎng)站分類: " << name << endl;

??? }

};

?

//網(wǎng)站的工廠類

class WebSiteFactory

{

private:

??? //通過Key Value的方式存儲(chǔ)網(wǎng)站

??? map<string, WebSite*> wf;

public:

??? //得到某個(gè)網(wǎng)站

??? WebSite *getWebSiteCategory(string key)

??? {

??????? if (wf.find(key) == wf.end())

??????? {

??????????? //通過一個(gè)統(tǒng)一的ConcreteWebSite來實(shí)例化網(wǎng)站,并將網(wǎng)站名存儲(chǔ)起來

??????????? wf[key] = new ConcreteWebSite(key);

??????? }

?

??????? return wf[key];

??? }

??? //獲得站點(diǎn)數(shù)量

??? int getWebSiteCount()

??? {

??????? return wf.size();

??? }

};

?

int main()

{

??? WebSiteFactory *wf = new WebSiteFactory();

?

??? WebSite *fx = wf->getWebSiteCategory("good");

??? fx->use();

?

??? WebSite *fy = wf->getWebSiteCategory("產(chǎn)品展示");

??? fy->use();

?

??? //相同站點(diǎn)再創(chuàng)建,類似網(wǎng)址只有一個(gè)

??? WebSite *fz = wf->getWebSiteCategory("產(chǎn)品展示");

??? fz->use();

?

??? WebSite *f1 = wf->getWebSiteCategory("博客");

??? f1->use();

?

??? WebSite *f2 = wf->getWebSiteCategory("博客");

??? f2->use();

???

??? //結(jié)果為3

??? cout << wf->getWebSiteCount() << endl;

??? cin.get();

??? return 0;

}

運(yùn)行結(jié)果如下:

總結(jié)

以上是生活随笔為你收集整理的18享元模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。