4.泡妞与设计模式(五) 原型模式
PROTOTYPE 原型模式
原型模式允许动态的增加或减少产品类,产品类不需要非得有任何事先确定的等级结构,原始模型模式适用于任何的等级结构。缺点是每一个类都必须配备一个克隆方法。(简单点说就是调用的都可以找到原型,比如你和MM聊天,事先设计好一些情话,需要的时候copy就可以了,这时候情话就是原型)
原型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的方法创建出更多同类型的对象。
代码示例
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <Windows.h> 4 #include <locale.h> 5 #include <string.h> 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", pmsg->message_str); 25 print(wstr); 26 } 27 28 void runmsg(void *p) 29 { 30 struct messages *pmsg = (struct messages *)p; 31 pmsg->p(pmsg); 32 } 33 34 void main() 35 { 36 setlocale(0, "zh-CN"); 37 wchar_t strs[10][100] = 38 { 39 L"1", 40 L"2", 41 L"3", 42 L"4", 43 L"5", 44 L"6", 45 L"7", 46 L"8", 47 L"9", 48 L"10" 49 }; 50 51 struct messages msg[10]; 52 for (int i = 0; i < 10; i++) 53 { 54 //拷贝 55 msg[i].message_str = strs[i]; 56 msg[i].p = dingzhi; 57 HANDLE hd = _beginthread(runmsg, 0, &msg[i]); 58 WaitForSingleObject(hd, INFINITE); 59 } 60 61 system("pause"); 62 }