// // // // // // // // //
///2013.2.22
// // // // // // // // //
时间追溯到1980年。
那是一个充满回忆的上午。
"让我们荡起双桨~,
学习雷锋同志好榜样~"
阳光明媚,
春天刚刚过去,空气中弥漫着一种淡淡的清香。
鄱阳湖畔的柳树在初夏的暖风中舞起柔美的绿条。
鸟儿在树枝上窃窃私语,
似乎在讲着甜蜜的情话。
时而会有清脆的自行车铃声飘过。
"铃铃铃……"
悦耳的程度一点不逊色于剧院里的交响曲。
青翠色的大道上,
行人与车辆稀疏地路过,
却让人丝毫感觉不到一点的慵懒,
反而有一种莫名的惬意。
大道的一边,
一个穿着中山装的青年,
白嫩的脸颊微微有些泛红。
——原因是走在他右边的那个年轻女子。
顺直的长发随意地搭在她的肩上,
她轻轻地笑着,
眼睛眯着,
却掩藏不了如出水芙蓉般的水灵。
嘴唇却似三月的桃花,
——淡绯,而娇嫩。
青年陪着她慢慢地走着,
看得出来,
他有些中意这个姑娘。
"天气开始有点热了…"
青年想了半天才挤出了这句话。
他太害羞了,
不过这也不怪他。
毕竟,
在那个牵过手都代表私定终身的年代,
害羞的文艺青年比树上的文艺小鸟还要多。
"是啊…"
那个女孩子也回应道,
"前几天刚刚立夏呢"
"恩,恩,确实是这样"
青年匆忙地附和。
恩……刚刚立夏呢……
青年忽然陷入了沉思…
"今天是立春呢"
这句话忽然在青年脑海中响起。
那是几个月前,
青年刚刚尝试去恋爱时候的事了。
不过那时候的那个姑娘,
后来因为觉得青年太过害羞,
也不会说几句关心人的话,
就将青年约出来,
塞给他一封信,
然后转身就走了。
信上写着:
对不起,你是个好哥哥。
不过我们不适合。
那天的天空飘着雪花,
随着雪花一起落下的,
还有青年那点微薄的期待。
自那之后,
青年愈发害羞,
几乎在女孩子面前都无法抬起头来说话,
只能趁对方转头的时候,
偷偷地瞄她一眼。
青年想到那天的雪花,
那天的信,
不由得打了一个寒颤。
"你怎么了?"
看到青年在发抖,
旁边的姑娘问道,
"是不是生病了?"
"啊"
从回忆中惊醒,
青年忽然意识到现在不是伤心的时候,
要抓住当下的机会,
不然自己可能一辈子单身。
"没……没事……"
青年结结巴巴地回答。
偏不凑巧的,
一阵风吹来,
青年忽然感觉鼻子有点痒,
"阿嚏——"
一个响亮的喷嚏应声而出。
恩,
这个喷嚏是这段时间里青年发出的最大的声响了。
"看,还说没有"
姑娘说道,
"不用勉强,先回家好好休息吧"
没有啊,
刚才那个不是感冒啊,
只是鼻子痒了一下而已。
我很健康,
更何况,
还想跟你再走远一些啊。
青年真想将这些话一口气全说出来。
不过,
难度太大了,
这段话的长度远远超过了青年正常与女孩交流的能力。
这对青年来说难度不亚于挑战吉尼斯。
相比之下,
两个字就简单多了:
"好吧。"
青年失意地回答。
……
望着姑娘离去的背影,
青年忽然觉得天空又飘起了雪花。
又一次…又一次,
青年喃喃自语。
他恨不得抽自己一巴掌,
——如果这样做能消除他的害羞的话。
"不交流,怎么知道对方信息啊"
"不交流,怎么表达自己能力啊'
"不交流,怎么 能够坦诚相待啊"
"不交流,怎么能将喜欢转变为爱情啊!!!"
青年对着天空无助地呐喊。
“我不想单身!!!”
忽然,
一个黑影出现在了青年身后。
随之而来的是这个声音:
"你刚才说你想与对方交流感情(信息)?"
黑影笑了,
"我可以帮你哦。"
青年大惊,
转身一看,
此人从未谋面,
并非自己相熟之人。
"请问您是?"
"我?"
黑影回答道:
"你就叫我Mediator吧。"
【核心】作为中介,在两个类之间提供手段来使得双方能够交流信息。
【UML图】
示例代码:
【大致思路】
Boy与Girl之间的沟通通过其内部共同持有的Mediator来进行。
Mediator.h
#ifndef _MEDIATOR_H_ #define _MEDIATOR_H_ #include<string> using namespace std; class Mediator; class Youngs { public: Youngs(Mediator* m) { this->med = m; } virtual void Say(string words) = 0; virtual string getWords() = 0; virtual void Excute() = 0; protected: string words; Mediator* med; }; class YoungBoy: public Youngs { public: YoungBoy(Mediator* m):Youngs(m) { } virtual void Say(string words); virtual string getWords(); virtual void Excute(); }; class YoungGirl: public Youngs { public: YoungGirl(Mediator* m):Youngs(m) { } virtual void Say(string words); virtual string getWords(); virtual void Excute(); }; class Mediator { public: Mediator(){} void setYoungs(Youngs* b,Youngs* g); void boySayToGirl(); void girlSayToBoy(); private: Youngs* boy; Youngs* girl; }; #endif
Mediator.cpp
#include"Mediator.h" #include<iostream> using namespace std; void YoungBoy::Say(string words) { this->words = words; } string YoungBoy::getWords() { return this->words; } void YoungBoy::Excute() { this->med->boySayToGirl(); } void YoungGirl::Say(string words) { this->words = words; } string YoungGirl::getWords() { return this->words; } void YoungGirl::Excute() { this->med->girlSayToBoy(); } void Mediator::setYoungs(Youngs* b,Youngs* g) { boy = b; girl = g; } void Mediator::boySayToGirl() { if(boy == NULL || girl == NULL) return; cout<<"Boy says: "<<boy->getWords()<<endl; girl->Say(boy->getWords()); cout<<"Girl Listened"<<endl; cout<<endl; } void Mediator::girlSayToBoy() { if(boy == NULL || girl == NULL) return; cout<<"Girl says: "<<girl->getWords()<<endl; boy->Say(girl->getWords()); cout<<"Boy Listened"<<endl; cout<<endl; }
main.cpp
#include"Mediator.h" int main() { Mediator* mediator = new Mediator(); Youngs* boy = new YoungBoy(mediator); Youngs* girl = new YoungGirl(mediator); mediator->setYoungs(boy,girl); boy->Say("What a good weather today"); boy->Excute(); girl->Say("I think so"); girl->Excute(); boy->Say("Look at here,that scene is so beautiful"); boy->Excute(); girl->Say("I think so"); girl->Excute(); boy->Say("Just like you"); boy->Excute(); girl->Say("……"); girl->Excute(); boy->Say("My dear,I love you"); boy->Excute(); girl->Say("……"); girl->Excute(); boy->Say("I'm serious,i really want to protect you"); boy->Excute(); girl->Say("……"); girl->Excute(); boy->Say("Be my girlfriend,okey?"); boy->Excute(); girl->Say("Sorry,…"); girl->Excute(); girl->Say("You are a kind person,but…you don't deserve me"); girl->Excute(); boy->Say("T_T"); boy->Excute(); return 0; }
输出结果:
注意事项:
其实一般说起共同持有,
我们都会想到使用static。
但是同时也不要忘了,
只要两个对象持有同一个指针的情况下,
此时也将起到static的效果。
那么如何正确使用static,
或者说到底该什么时候使用static,什么时候使用共同指针呢?
(注意,此时区分的static是作用效果与共同指针相同时,并不包括static其他特性)
笔者认为,
这两个真正的区别是从设计角度去考虑的。
就像这个mediator,
说白了就是媒婆。
两对情侣之间的媒婆可能不是同一个人。
这种并不具有真正单例意义的时候,
使用static就有点大材小用了,
但是当类似全班同学都有一个老师时,
这个老师可以就使用static(假设没有其他班)。
以上。
时过境迁,
眨眼已是三十年后。
青年已经成了爷爷。
当老人抬首仰望夕阳回忆当年青涩时光时,
一旁刚满十岁的孙女在电脑上敲下一行字:
——好累,感觉自己不会再爱了。