1 目的
[color=red]为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式的意图是简化接口。[/color]
2 优点
[color=red]a) 它对客户屏蔽子系统组件,因而减少了客户处理对的数目并使得子系统使用起来更加方便。
b) 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。
c) 如果应用需要,它并不现在它们使用子系统类,因此你可以在系统易用性和通用性之间加以选择。[/color]
[img]http://t25-1.yunpan.360.cn/p/800-600.f3dfc11f1812c21b78494acdaf71ad4e95d6378b.661428.jpg?t=7f39af56fd4daeef611a2c8707d9ce5b&d=20130822[/img]
标准示例
[color=red]为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式的意图是简化接口。[/color]
2 优点
[color=red]a) 它对客户屏蔽子系统组件,因而减少了客户处理对的数目并使得子系统使用起来更加方便。
b) 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。
c) 如果应用需要,它并不现在它们使用子系统类,因此你可以在系统易用性和通用性之间加以选择。[/color]
[img]http://t25-1.yunpan.360.cn/p/800-600.f3dfc11f1812c21b78494acdaf71ad4e95d6378b.661428.jpg?t=7f39af56fd4daeef611a2c8707d9ce5b&d=20130822[/img]
//Facade
//
class Amplifier;
class Tuner;
class DvdPlayer;
class CdPlayer;
class Projector;
class TheaterLights;
class Screen;
class PopcornPopper;
//
class HomeThreaterFacade
{
public:
HomeThreaterFacade(Amplifier* amplifier, Tuner* tuner,
DvdPlayer* dvdPlayer, CdPlayer* cdPlayer, Projector* projector,
TheaterLights* theaterLights, Screen* screen, PopcornPopper* popcornPopper)
{
m_Amplifier = amplifier;
m_Tuner = tuner;
m_DvdPlayer = dvdPlayer;
m_CdPlayer = cdPlayer;
m_Projector = projector;
m_TheaterLights = theaterLights;
m_Screen = screen;
m_PopcornPopper = popcornPopper;
}
void watchMovie(string movie)
{
cout << "Get ready to watch a movie..." << endl;
// m_PopcornPopper->on();
// m_PopcornPopper->pop();
// m_TheaterLights->dim(10);
// m_Screen->down();
// m_Projector->on();
// m_Projector->wideScreenMode();
// m_Amplifier->on();
// m_Amplifier->setDvd(m_DvdPlayer);
// m_Amplifier->setSurroundSound();
// m_Amplifier->setVolume(5);
// m_DvdPlayer->on();
// m_DvdPlayer->play();
}
void endMovie(string movie)
{
cout << "Shtting movie theater down..." << endl;
// m_PopcornPopper->off();
// m_TheaterLights->on();
// m_Screen->up();
// m_Projector->off();
// m_Amplifier->off();
// m_DvdPlayer->stop();
// m_DvdPlayer->eject();
// m_DvdPlayer->off();
}
private:
Amplifier* m_Amplifier;
Tuner* m_Tuner;
DvdPlayer* m_DvdPlayer;
CdPlayer* m_CdPlayer;
Projector* m_Projector;
TheaterLights* m_TheaterLights;
Screen* m_Screen;
PopcornPopper* m_PopcornPopper;
};
//
class HomeThreaterTestDrive
{
public:
void run()
{
// HomeThreaterFacade* homeTheater = new HomeThreaterFacade();
// homeTheater->watchMovie("Raiders of the Lost Ark");
// homeTheater->endMovie();
}
};
标准示例
#include <iostream>
using namespace std;
class Subsystem1
{
public:
Subsystem1(){}
~Subsystem1(){}
void Operation()
{
cout<<"Subsystem1 operation."<<endl;
}
};
class Subsystem2
{
public:
Subsystem2(){}
~Subsystem2(){}
void Operation()
{
cout<<"Subsystem2 operation."<<endl;
}
};
class Facade
{
public:
Facade()
{
this->_subs1 = new Subsystem1();
this->_subs2 = new Subsystem2();
}
~Facade()
{
delete _subs1;
delete _subs2;
}
void OperationWrapper()
{
this->_subs1->Operation();
this->_subs2->Operation();
}
private:
Subsystem1 *_subs1;
Subsystem2 *_subs2;
};
int main(int argc, char *argv[])
{
Facade *f = new Facade();
f->OperationWrapper();
return 0;
}