现在的位置: 首页 > 综合 > 正文

【2013.2.22】少年当自强,不能总单身。——Mediator

2018年02月19日 ⁄ 综合 ⁄ 共 4055字 ⁄ 字号 评论关闭

// // // // // // // // //

///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(假设没有其他班)。

以上。


时过境迁,

眨眼已是三十年后。

青年已经成了爷爷。


当老人抬首仰望夕阳回忆当年青涩时光时,

一旁刚满十岁的孙女在电脑上敲下一行字:


——好累,感觉自己不会再爱了。

抱歉!评论已关闭.