C语言实现《大话设计模式》中的代理模式例程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言实现《大话设计模式》中的代理模式例程
分类:设计模式2012-06-12 11:07 545人阅读评论(0) 收藏举报设计模式语言cstructfunction
[cpp]view plainc opyprint?
1.#ifndef __PROXY_H__
2.#define __PROXY_H__
3.#include "rtthread.h"
4.#include "finsh.h"
5.//被追求者类
6.typedef struct _SchoolGirl SchoolGirl;
7.struct _SchoolGirl
8.{
9.char *Name;
10.void (*SchoolGirlDelete)(SchoolGirl *pSchoolGirl);
11.};
12.static void SchoolGirlDelete(SchoolGirl *pSchoolGirl)
13.{
14. rt_free(pSchoolGirl);
15.}
16.SchoolGirl *SchoolGirlCreate(char *Name)
17.{
18. SchoolGirl *pSchoolGirl = (SchoolGirl *)rt_malloc(sizeof(SchoolGirl));
19. pSchoolGirl->Name = Name;
20. pSchoolGirl->SchoolGirlDelete = SchoolGirlDelete;
21.return pSchoolGirl;
22.}
23.//追求者类
24.typedef struct _Pursuit Pursuit;
25.struct _Pursuit
26.{
27. SchoolGirl *mm;
28.void (*PursuitDelete)(void *pPursuit);
29.void (*GiveDolls)(Pursuit *pPursuit);
30.void (*GiveFlowers)(Pursuit *pPursuit);
31.void (*GiveChocolate)(Pursuit *pPursuit);
32.};
33.static void PursuitDelete(void *pPursuit)
34.{
35. rt_free(pPursuit);
36.}
37.static void PursuitGiveDolls(Pursuit *pPursuit)
38.{
39. rt_kprintf(" %s, 送你洋娃娃\n", pPursuit->mm->Name);
40.}
41.static void PursuitGiveFlowers(Pursuit *pPursuit)
42.{
43. rt_kprintf(" %s, 送你鲜花\n", pPursuit->mm->Name);
44.}
45.static void PursuitGiveChocolate(Pursuit *pPursuit)
46.{
47. rt_kprintf(" %s, 送你巧克力\n", pPursuit->mm->Name);
48.}
49.Pursuit *PursuitCreate(SchoolGirl *mm)
50.{
51. Pursuit *pPursuit = (Pursuit *)rt_malloc(sizeof(Pursuit));
52. pPursuit->mm = mm;
53. pPursuit->PursuitDelete = PursuitDelete;
54. pPursuit->GiveDolls = PursuitGiveDolls;
55. pPursuit->GiveFlowers = PursuitGiveFlowers;
56. pPursuit->GiveChocolate = PursuitGiveChocolate;
57.return pPursuit;
58.}
59.//代理者类
60.typedef struct _Proxy Proxy;
61.struct _Proxy
62.{
63. Pursuit *gg;
64.void (*ProxyDelete)(void *pProxy);
65.void (*GiveDolls)(Proxy *pProxy);
66.void (*GiveFlowers)(Proxy *pProxy);
67.void (*GiveChocolate)(Proxy *pProxy);
68.};
69.static void ProxyDelete(void *pProxy)
70.{
71. ((Proxy *)pProxy)->gg->PursuitDelete(((Proxy *)pProxy)->gg);
72. rt_free(pProxy);
73.}
74.static void ProxyGiveDolls(Proxy *pProxy)
75.{
76. pProxy->gg->GiveDolls(pProxy->gg);
77.}
78.static void ProxyGiveFlowers(Proxy *pProxy)
79.{
80. pProxy->gg->GiveFlowers(pProxy->gg);
81.}
82.static void ProxyGiveChocolate(Proxy *pProxy)
83.{
84. pProxy->gg->GiveChocolate(pProxy->gg);
85.}
86.Proxy *ProxyCreate(SchoolGirl *mm)
87.{
88. Proxy *pProxy = (Proxy *)rt_malloc(sizeof(Proxy));
89. pProxy->gg = PursuitCreate(mm);
90. pProxy->ProxyDelete = ProxyDelete;
91. pProxy->GiveDolls = ProxyGiveDolls;
92. pProxy->GiveFlowers = ProxyGiveFlowers;
93. pProxy->GiveChocolate = ProxyGiveChocolate;
94.return pProxy;
95.}
96.#endif
97.
98.
99.#include "Proxy.h"
100.//客户端
101.void ProxyModle(void)
102.{
103. SchoolGirl *jiaojiao = SchoolGirlCreate("李娇娇");
104. Proxy *daili = ProxyCreate(jiaojiao);
105. daili->GiveDolls(daili);
106. daili->GiveFlowers(daili);
107. daili->GiveChocolate(daili);
108.
109. jiaojiao->SchoolGirlDelete(jiaojiao);
110. daili->ProxyDelete(daili);
111.}
112.
113.FINSH_FUNCTION_EXPORT(ProxyModle, Proxy Modle);
代理是真实对像的代表,它跟真实对像类属于关联关系,实现相同的接口,调用时调用代理,但真正处理时却是真实对像。
更多0
∙C语言实现《大话设计模式》中的装饰模式例程
∙C语言实现《大话设计模式》中的原型模式例程。