// // // // // // // // //
///2013.2.5
// // // // // // // // //
不得不说,
现在的用户真是越来越挑剔了。
他在使用你做的产品,
一边使用一边在骂。
骂你的软件界面不够漂亮,
骂你的启动速度不够快,
骂你的操作不够简单。
不可否认,
科技的迅速发展,
带来的是人们需求的高速膨胀,
——其膨胀速度早已超过科技发展速度。
再好的产品都会有人指责,吹毛求疵。
不过,
躲在IT行业里面的技术宅们也不是傻瓜,
只是等着挨骂,
自然也会想法设法满足用户的需求,
——不管它是多么地不合理。
User always right.
比如说为应对用户指责操作不够简单,
许多软件已经有了不同模式:
比如上图的专家模式。
在这个模式下,
是具体的设置,
用户可以随心所欲,
更加灵活的同时
——也更复杂。
而面向更为一般的用户,
则提供普通模式。
在这种模式下用户不需要有什么复杂的操作,
简而言之,
就是“一键搞定”。
这种不同的模式,
就是我们今天要讲的Facade.
【核心】统一接口,将分步复杂的操作整合为简单操作。
UML图:
如上图所示,
高层提供统一的接口,
在SubSystem1中实现第一个步骤,
在SubSystem2中实现第二个步骤。
这些步骤都是复杂的。
然后在另一个(Facade)类中实现同一个接口,
整合SubSystem1与SubSystem2。
从而创建一个简单的操作接口。
实现很简单,直接看代码即可。
【大致思路】
一个杀毒系统,
其一键操作(EasyFacade)的内部工作流程如下:
Scan Disk->Kill Virus->Finish work.
不多说,
看代码(这可能是笔者近几年写过最简单的代码了。。)
Facade.h
#ifndef _FACADE_H_
#define _FACADE_H_
class ScanDisk
{
public:
ScanDisk(){}
~ScanDisk(){}
void Operation();
};
class KillVirus
{
public:
KillVirus(){}
~KillVirus(){}
void Operation();
};
class EasyFacade
{
public:
EasyFacade(){}
~EasyFacade(){}
void Operation();
private:
ScanDisk* sd;
KillVirus* kv;
};
#endif
Facade.cpp
#include"Facade.h"
#include<iostream>
void ScanDisk::Operation()
{
std::cout<<"Scanning Disk...."<<std::endl;
}
void KillVirus::Operation()
{
std::cout<<"Killing Virus...."<<std::endl;
}
void EasyFacade::Operation()
{
sd = new ScanDisk();
kv = new KillVirus();
//Easy handle.
sd->Operation();
kv->Operation();
std::cout<<"Finished Work!"<<std::endl;
}
main.cpp
#include"Facade.h"
int main()
{
EasyFacade* facade = new EasyFacade();
facade->Operation();
//So easy.Right?
return 0;
}
运行结果:
【注意事项】
无。
最后说一点题外话:
我们是开发者,
但同时也是用户。
作为用户,
我们可以去挑剔别人的产品。
但作为开发者,
我们需要学习。
当我们在批评别人的时候,
不要忘了,
看看自己是不是也有这个缺点,
三省吾身不至于,
但以他人为镜,
用来弥补自身缺陷,
这,还是可以的。