把一些复杂的流程封装成一个接口供给外部用户更简单的使用,为子系统统一一套接口,把内部复杂的实现屏蔽,让子系统更加容易使用。
听起来可能会很抽象,别急,小妖怪,让我帮你分析分析。
假如你想把衣服干净需要做什么?泡衣服,洗衣服,排水,甩干,这时你的衣服洗干净了,你开心吗?不你不开心(我说你不开心你就得不开心,哼)。因为我只是想要脏衣服变成干净的衣服而已。
后来,你有了一台洗衣机,它的功能很强大,他可以泡衣服,洗衣服,排水,甩干。你把衣服给他,他会给你洗好的衣服。现在你开心了吗?开心了(嘻嘻)。
对于客户来说,他们可能只希望得到最终结果,并不想知道中间过程怎么样,像是(泡衣服,洗衣服,排水,甩干)这些都是中间过程。我们为这些过程包裹一层外观,于是洗衣机出现了,洗衣机帮我们把这些事都包了,我们只需要拿干净的衣服就可以了。
#include<iostream>
//#include<string>
using namespace std;
//泡衣服
class SoakClothes
{
public:
SoakClothes() {}
void Soak()
{
cout<<"泡衣服"<<endl;
}
};
//洗衣服
class WashClothes
{
public:
WashClothes() {}
void Wash()
{
cout<<"洗衣服"<<endl;
}
};
//排水
class Drainage
{
public:
Drainage() {}
void Drain()
{
cout<<"排水"<<endl;
}
};
//甩干衣服
class DryClothes
{
public:
DryClothes() {}
void Dry()
{
cout<<"甩干衣服"<<endl;
}
};
//洗衣机
class Facade
{
public:
Facade()
{
soak = new SoakClothes();
wash = new WashClothes();
drain = new Drainage();
dry = new DryClothes();
}
// 给客户提供统一的接口,客户不必关心内部实现
void washing()
{
//洗衣全套一条龙
soak->Soak();
wash->Wash();
drain->Drain();
dry->Dry();
}
void drying()
{
//湿衣服甩干
dry->Dry();
}
~Facade()
{
delete soak;
delete wash;
delete drain;
delete dry;
}
private:
SoakClothes* soak;
WashClothes* wash;
Drainage* drain;
DryClothes* dry;
};
//自己洗
void main_you()
{
SoakClothes* soak;
WashClothes* wash;
Drainage* drain;
DryClothes* dry;
soak = new SoakClothes();
wash = new WashClothes();
drain = new Drainage();
dry = new DryClothes();
soak->Soak();
wash->Wash();
drain->Drain();
dry->Dry();
delete soak;
delete wash;
delete drain;
delete dry;
}
//洗衣机洗
void main_machine()
{
Facade * machine = new Facade();
machine->washing();
delete machine;
}
int main()
{
// main_you();
main_machine();
return 0;
}