喵宅苑 MewoGarden × 技术宅社区II | Z站 Z Station 棒棒哒纯文字二次元技术社区

正文

【教】明明人家才是最萌的设计模式(10.27更新)

作者:dxxds
[i=s] 本帖最后由 dxxds 于 2013-10-27 10:55 编辑 自从第一个教程帖完结后,就偷懒没再发第二贴了。原因也是有的,其中最大的原因就是因为…… 因为空撸伤身什么的造成我一直没有再发新帖。 当然这次发了,也并不是说我就有了,我依然没有。你们是想说我有基友了么?#16t 你们!你们实在是!是!太!了解我了! 嗯,好基友也是没有的。 好了,先复习一下之前学过的一个内容吧:继承。 就是在情人节的那天,用一个父类指针创建一个子类对象,当然,这个父亲有好几个孩子,他可以随便选则是自己变成哪一个,或者轮着变一圈,然后…… 这就是策略啊策略!别说我无耻啊!这设计模式里就是这么写的! 然后就上来我们今天的第一课内容了:策略模式! 是有人想问我为啥不是从工厂模式开始讲?别的书都是从这个开始的…… 切!库达拉那医 …… 那样不就显得我很不专业么,显得我是抄他们的了么?所以我换一个。 这个策略模式,就是说会随着环境的变化,自己的策略也会有相应的变化。之前继承的课程里就用策略模式 今天出门 如果晴天,就去拿棒棒糖换萝莉。 如果是阴天,就去基友家撸PSP。 如果是下雪天,就自己撸代码。 先上这个熟悉的代码模板 #include<iostream> using namespace std; int main() { return 0; } 默认编译环境是WIN下的C-FREE和VS2005以上。(C-FREE好像用的就是我的VS编译器…… 主要是我的DEVCPP很严重的坏了,然后我又懒的修复…… 想来这点基础C++,语法应该都是一样的) 然后在这个基础上,添加一个纯洁的父亲类 class I_evil //纯洁类 I表示interface { public: I_evil(void){}; //构造函数,用来创造纯洁 virtual ~I_evil(void){}; //析构函数,当然是删除纯洁 virtual void strategy(void)=0; //虚函数,执行那纯洁的策略 }; 然后我们来写这第一个策略 class C_sunshine : public I_evil //公有方式继承父类,为什么公有,因为好用 { public: C_sunshine(){}; ~C_sunshine(){}; //是虚的,不过virtual可以不用写 void strategy(void) //也是虚的,virtual写不写都一样,一般要写,因为整齐,可读性好 { cout<<"去拿棒棒糖换萝莉"<<endl; } }; 注释写的很清楚了,我就接着写第二第三个了 class C_cloudy : public I_evil //第二个策略,继承纯洁 { public: C_cloudy(){}; ~C_cloudy(){}; void strategy(void) { cout<<"去基友家撸PSP"<<endl; } }; class C_snow : public I_evil //第三个策略 { public: C_snow(){}; ~C_snow(){}; void strategy(void) { cout<<"独自撸代码"<<endl; } }; 然后就该执行了 int main() { I_evil* Evil_Father = NULL; //一个纯洁的爸爸,main函数里,全程就只有这一个变量 cout<<"第一天,晴天"<<endl; //第一天开始了 Evil_Father = new C_sunshine; Evil_Father->strategy(); delete Evil_Father; //第一天结束了 cout<<"第二天,下雪"<<endl; //第二天来了 Evil_Father = new C_snow; Evil_Father->strategy(); delete Evil_Father; //第二天过去了 cout<<"最后一天,阴天"<<endl; //第三天也来了 Evil_Father = new C_cloudy; Evil_Father->strategy(); delete Evil_Father; //第三天结束了 system("pause>nul"); // stdlib.h 或者 cstdlib return 0; } 今天开斋节,小放假 内容简单易懂,看完回一下这个好帖子。 当然,不懂的就更要回一下这个0售价的好帖子了啊!!

回复

我就是进来溜达溜达

作者:呆萌浅
!27~我就是进来溜达溜达
查看回复

太有爱了

作者:TB炭
太有爱了#10x 就是喜欢卖萌的代码2333
查看回复

本帖最后由

作者:dxxds
[i=s] 本帖最后由 dxxds 于 2013-8-11 22:26 编辑
Mr_Alex 发表于 2013-8-11 21:43 所以你什么时候开始说说命令模式
命令模式还用到了其它模式,肯定是前期不能讲的了 而且代码,有各种组合,代码会比较长,得专门设计剧情
查看回复

所以你什么时候开始说说命令模式

作者:Mr_Alex
所以你什么时候开始说说命令模式 @ou#
查看回复

看到喜家家压力很大

作者:moxiagy
好萌 看到喜家家压力很大
查看回复

本帖最后由

作者:dxxds
[i=s] 本帖最后由 dxxds 于 2013-8-13 22:57 编辑 最萌的设计模式2 八月生死两茫茫,不思量,自难忘。 又到了一年一度用40度的立秋给大家卖萌的时候了。 走在立秋的路上,心中唱着立秋的歌(修辞而已),我感觉我慢慢的回到秋天,区区40度而已,完全没有感觉到好像身边一直有个大火炉在跟着我,或者全市就是一个桑拿房的感觉,立秋真好,倍感凉爽。 以上就是一个完全不懂二十四节气的宅男,在出去找基友连PSP时路上的感觉,十分美妙,建议大家都好好领会一下此段文章所传达出来的精神和内涵。 不要跟我提什么文采不文采的,我的语文从小学开始就慢慢的摆脱了不及格,到了高中才又慢慢的回到了不及格而已,且不说我最得意的学科是美术课,就单单拎出一定能考到及格线附近的体育课就能吓死你们。 看到了一直在前进的我,你们为自己懈怠的生活汗颜了吧。于是乎,就由最萌的DXXDS来带领你们继续前进 策略模式的进阶:代理模式 今天的代码从这开始 #include<iostream> using namespace std; int main() { return 0; } 这次的内容相较于之前的内容,更加简单(前提是前一课完全看懂) 就是在前一课的基础上,增加了一个代理类,剩下的都一样,那就来吧 class I_evil //上节课的纯洁 { I_evil(void); virtual ~I_evil(void); virtual strategy(void)=0; }; class C_sunshine : public I_evil //上节课的晴天策略 { public: C_sunshine(){}; ~C_sunshine(){}; void strategy(void) { cout<<"去拿棒棒糖换萝莉"<<endl<<endl; } }; class C_cloudy : public I_evil //上节课的阴天策略 { public: C_cloudy(){}; ~C_cloudy(){}; void strategy(void) { cout<<"去基友家撸PSP"<<endl<<endl; } }; class C_snow : public I_evil //雪天策略,一个字儿也没改 { public: C_snow(){}; ~C_snow(){}; void strategy(void) { cout<<"独自撸代码"<<endl<<endl; } }; 然后咱们这节课的内容就开始了。 假设现在有一个代理机器人,你问它:“今儿晴天,干啥最可能掉节操?" 然后这个代理机器人在经过了一阵疯狂的运算后,告诉你了今天可能最掉节操的运势 class C_proxy_evil : public I_evil //代理类,代理机器人,代理方法?叫什么都行。反正全程就用这个类产生的对象演示结果 { public: C_proxy_evil(I_evil* evil): m_evil(evil){} //复制构造函数,用来复制下面纯洁的策略, ~C_proxy_evil() //别忘了在这里要删除复制来的纯洁的策略 { delete m_evil; } void strategy(void) //最掉节操的事儿 { this->m_evil->strategy(); } private: I_evil* m_evil; //纯洁父亲类的可变身成员变量/对象,必须是指针类型 }; 现在这节课的内容就结束了。 - - 下面开始展示结果。 然后这里是展示纯洁用的函数 //下面封装一下,这样可以看的更清楚,顺便洗清我偷懒的嫌疑 void if_sunshine() //如果晴天,你就去拿棒棒糖换萝莉。 { cout<<"今天是晴天"<<endl; //吼吼~ 晴天哦~ I_evil* proxy = new C_proxy_evil(new C_sunshine); proxy->strategy(); delete proxy; } void if_cloudy() //如果是阴天,你就去基友家撸PSP。 { cout<<"今天是阴天"<<endl; //阴天了…… I_evil* proxy = new C_proxy_evil(new C_cloudy); proxy->strategy(); delete proxy; } void if_snow() //如果是下雪天,你就自己撸代码。 { cout<<"今天是下雪天"<<endl; //可惜,下雪了 I_evil* proxy = new C_proxy_evil(new C_snow); proxy->strategy(); delete proxy; } 现在正式开始 int main() { if_sunshine(); //这里是我也不知道该写点啥的注释 if_snow(); if_cloudy(); system("pause>nul"); // stdlib.h 或者 cstdlib return 0; } 有不懂的地方,就看第一课,还不懂就问我。 玩游戏去了。
查看回复

滚进来了

作者:kiyouka
dxxds 发表于 2013-8-9 21:04 @kiyouka
滚进来了#7096!
查看回复

dxxds回复给帖子:12707128

作者:dxxds
查看回复
上一页
下一页
0%
站点地图友情链接:
喵宅苑
喵空间社区程序
喵宅苑 静态版
宅喵RPG地图编辑器
络合兔
Lanzainc
技术宅
小五四博客
莉可POI
Mithril.js
枫の主题社
Project1
午后少年
机智库
七濑胡桃
xiuno
幻想の日常
魂研社
Nothentai
0xffff
欲望之花
泽泽社长
淀粉月刊
HAYOU