~~~~我的生活,我的点点滴滴!!
仍然先来说明一下何为外观模式,一个复杂的系统包含很多子系统,为了使用这个复杂的系统,我们定义一个统一的接口来使用这个复杂的系统。当用户操作的时候只要调用我们提供的这个接口就好了,至于底层的这个复杂的系统,用户不必关系是如何工作的。这里列举一个网上的例子,编译系统是一个复杂的系统,包括什么词法分析,语法分析,语义分析等等,用户在编译程序的时候不需要了解这个复杂的系统到底是怎么编译的,只要使用统一的接口编译就可以了,代码如下:
class Scanner
{
public:
doScanner()
{
//do something
}
};
class Parser
{
public:
doParser()
{
//do something
}
}
class Compile
{
public:
doCompile()
{
Scanner m_scan;
m_scan.doScanner();
Parser m_parse;
m_parse.doParser();
}
}
int main()
{
Compile cp;
cp.doCompile();
return 0;
}
这种是隐藏了内部实现,用简单明了的接口表达了用户意愿,coocos2dx里面有好多这样的用法 ,最普遍的例如那些静态的create函数,只要用户一看就知道那是用来干什么,然后用户也不需要知道里面做了什么操作,如果让用户自己去写,那就得先构造出一个对象,然后把其加入自动内存管理系统中,然后在做一些别的操作,不仅慢,还容易忘记写上某些功能,特别是加入自动内存管理系统中。
对于使用这种模式的类典型是SimpleAudioEngine,我们播放声音就是调用这个类的接口来完成的,而底层它是使用了CDSoundEngine、CDAudioManage这俩个类的相关管理声音的函数。我们知道SimpleAudioEngine是没有函数提供给我们循环播放音效的,但是我们可以使用底层的CDAudioManage来实现这个功能,这就是所谓的灵活性吧。