1. 程式人生 > >4.泡妞與設計模式(四)享元模式

4.泡妞與設計模式(四)享元模式

sage eight 客戶端 pms AI 一個 div 創建 stdlib.h

FLYWEIGHT 享元模式

享元模式:FLYWEIGHT在拳擊比賽中指最輕量級。享元模式以共享的方式高效的支持大量的細粒度對象。享元模式能做到共享的關鍵是區分內蘊狀態和外蘊狀態。內蘊狀態存儲在享元內部,不會隨環境的改變而有所不同。外蘊狀態是隨環境的改變而改變的。外蘊狀態不能影響內蘊狀態,它們是相互獨立的。將可以共享的狀態和不可以共享的狀態從常規類中區分開來,將不可以共享的狀態從類裏剔除出去。客戶端不可以直接創建被共享的對象,而應當使用一個工廠對象負責創建被共享的對象。享元模式大幅度的降低內存中對象的數量。(簡單點說就是不同的對象調用同樣的功能函數)

每天跟MM發短信,手指都累死了,最近買了個新手機,可以把一些常用的句子存在手機裏,要用的時候,直接拿出來,在前面加上MM的名字就可以發送了,再不用一個字一個字敲了。共享的句子就是Flyweight,MM的名字就是提取出來的外部特征,根據上下文情況使用。

代碼示例

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <Windows.h>
 4 #include <locale.h>
 5 
 6 //定制結構體與函數,可以實現調用
 7 struct messages
 8 {
 9     wchar_t *name;
10     wchar_t *message_str;
11     void(*p)(struct messages *pmsg);
12 };
13 
14 //最終調用的函數
15 void print(wchar_t *wstr)
16 { 17 wprintf(L"%ls\n", wstr); 18 } 19 20 //定制消息 21 void dingzhi(struct messages *pmsg) 22 { 23 wchar_t wstr[300] = { 0 }; 24 wsprintf(wstr, L"%ls:%ls", pmsg->name, pmsg->message_str); 25 print(wstr); 26 } 27 28 void main() 29 { 30 setlocale(0, "zh-CN"); 31 wchar_t name[8] = L"
小王"; 32 wchar_t msg[200] = L"你好"; 33 struct messages message1 { name, msg, dingzhi}; 34 //實現換一個名字其他都正常 35 wcscpy(name, L"小李"); 36 //自己定制 37 message1.p(&message1); 38 39 system("pause"); 40 }

4.泡妞與設計模式(四)享元模式