码迷,mamicode.com
首页 > 其他好文 > 详细

Design Pattern Facade 门面设计模式

时间:2014-06-20 13:11:10      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:des   class   blog   code   http   ext   

Facade设计模式主要作用是因为有个很难使用的类,然后要设计一个新类,整理好这个类,使得其更好使用。

比如有类如此:

class MessyClass
{
	char *name;
public:
	MessyClass() : name(new char[3])
	{
		for (int i = 0; i < 3; i++)
		{
			name[i] = ' ';
		}
	}

	~MessyClass()
	{
		delete [] name;
	}

	void setFirstName(char a)
	{
		name[0] = a;
	}

	void setSecName(char b)
	{
		name[1] = b;
	}

	void setThirdName(char c)
	{
		name[2] = c;
	}

	char *getName()
	{
		return name;
	}
};

这样需要一个字符一个字符给这个类命名,那么就很繁琐。

可以使用一个类把这样的命名简化为一个字符串:

//Facade class
class NewNoNMessyClass
{
	MessyClass messy;
public:
	NewNoNMessyClass() : messy()
	{
	}

	void setName(string n)
	{
		if (n.size() > 0) messy.setFirstName(n[0]);
		if (n.size() > 1) messy.setSecName(n[1]);
		if (n.size() > 2) messy.setThirdName(n[2]);
	}

	string getName()
	{
		return messy.getName();
	}
};

这样只需要一个字符串就能给这个类命名了。

也可以这样设计:

class NewNoNMessyClass_2
{
	MessyClass *messy;
public:
	NewNoNMessyClass_2(MessyClass *me) : messy(me)
	{
	}

	void setName(string n)
	{
		if (n.size() > 0) messy->setFirstName(n[0]);
		if (n.size() > 1) messy->setSecName(n[1]);
		if (n.size() > 2) messy->setThirdName(n[2]);
	}

	string getName()
	{
		return messy->getName();
	}
};

这样仍然可以使用原来的MessyClass来操作,不过通过这个新类的函数可以方便给这个类命名。

测试:

void Faced_Run()
{
	NewNoNMessyClass nonMessy;
	nonMessy.setName("LOVE");
	cout<<nonMessy.getName()<<endl;

	MessyClass mec;//Orignal messy class
	NewNoNMessyClass_2 non2(&mec);//use new class to tide up messy class
	non2.setName("He");
	cout<<mec.getName()<<endl
		<<non2.getName()<<endl;
}

bubuko.com,布布扣



Design Pattern Facade 门面设计模式,布布扣,bubuko.com

Design Pattern Facade 门面设计模式

标签:des   class   blog   code   http   ext   

原文地址:http://blog.csdn.net/kenden23/article/details/28391095

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!