现在的位置: 首页 > 综合 > 正文

【2013.2.5】对不起,您的打开方式不对——Facade

2018年02月19日 ⁄ 综合 ⁄ 共 1542字 ⁄ 字号 评论关闭

// // // // // // // // //

///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;
}

运行结果:



【注意事项】

无。


最后说一点题外话:

我们是开发者,

但同时也是用户。


作为用户,

我们可以去挑剔别人的产品。

但作为开发者,

我们需要学习。


当我们在批评别人的时候,

不要忘了,

看看自己是不是也有这个缺点,

三省吾身不至于,

但以他人为镜,

用来弥补自身缺陷,


这,还是可以的。

抱歉!评论已关闭.