#ifndef _FACADE_H_                                           
#define _FACADE_H_

#include "stdafx.h"

class Subsystem1
{
public:
Subsystem1()
{
}
~Subsystem1()
{
}
void Operation();
};

class Subsystem2
{
public:
Subsystem2()
{
}
~Subsystem2()
{
}
void Operation();
};

class Facade
{
public:
Facade();
~Facade();
void OperationWrapper();
private:
Subsystem1* _subs1;
Subsystem2* _subs2;
};
#endif //~_FACADE_H_


#include "stdafx.h"
#include "facade_impl.h"
#include <iostream>
using namespace std;

void Subsystem1::Operation()
{
cout<<this<<" Subsystem1 operation"<<endl;
}

void Subsystem2::Operation()
{
cout<<this<<" Subsystem2 operation"<<endl;
}

Facade::Facade()
{
this->_subs1 = new Subsystem1();
this->_subs2 = new Subsystem2();
}

Facade::~Facade()
{
delete _subs1;
delete _subs2;
}

void Facade::OperationWrapper()
{
this->_subs1->Operation();
this->_subs2->Operation();
}


// Facade.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include "facade_impl.h"
using namespace std;

// 为子系统中的一组接口提供一个一致的界面, Facade模式定义了一个高层接口,这个接
// 口使得这一子系统更加容易使用

int _tmain(int argc, _TCHAR* argv[])
{
Facade* f = new Facade();

f->OperationWrapper();//包含sub1,sub2两个操作

delete f;
system("pause");

return 0;
}