// // // // // // // // //
///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; }
运行结果:
【注意事项】
无。
最后说一点题外话:
我们是开发者,
但同时也是用户。
作为用户,
我们可以去挑剔别人的产品。
但作为开发者,
我们需要学习。
当我们在批评别人的时候,
不要忘了,
看看自己是不是也有这个缺点,
三省吾身不至于,
但以他人为镜,
用来弥补自身缺陷,
这,还是可以的。