4.泡妞与设计模式(四)享元模式

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 }

 

posted @ 2018-03-09 00:09  喵小喵~  阅读(156)  评论(0编辑  收藏  举报