每次拿到一些作业。。。我都试图用JS这门流氓一般的脚本语言实现,之前写了c语言的简单版预处理(包括宏定义替换,.h
内容引入和不是很完善的注释删除)
这次的外观模式本以为是比较简单的实现,毕竟就几个类倒来倒去。
事情出乎我的意料,JS甚至耍了我这个初学JS的使用者的流氓,我接受不了。
原来的模式:
用户直接接触所有的子功能,自己决定实现什么效果。
什么是外观模式:
用户不关心功能的实现细节,我们只提供一个能使用功能的接口给用户,中间到底经历了多少个步骤,用户是看不到的。我们在用户和子功能之间添加一层外观类,整合子功能,然后提供给用户调用。
然后我们用js实现:
要用到的知识:类、coomonjs模块语法、node|fs模块、node|xml2js模块、xml语法、node|crypto-js模块,然后是外观模式、开闭原则和抽象思想。
了解的细节:
- commonjs和es6的引入语法:commonjs只能在运行时确定要引入的模块,换言之,针对我们的需求,
require()
的括号内可以放置一个变量,ES6就做不到,因为ES6的设计思想是尽量静态化,在编译时就能确定模块的依赖关系,所以跟一个变量就寄了,会报错。这里使用commonjs的引入语法,来实现抽象 - xml2js模块:解析xml格式的语句 是我们这里实现抽象的一个工具模块
- ES6增添了类的概念,其实本质上是JS函数的语法糖,但是也香香的。
总体流程:
客户端发起调用–>创建外观类实例–>调用外观类方法–>外观类引入所有的子系统功能,然后执行。
外观类具体步骤:
读取待加密文件内容–>用cryptojs加密–>创建新文件,写入加密后的内容
新外观类具体步骤:
读取待解密文件内容–>用cryptojs解密–>创建新文件,写入解密后的内容
具体代码实现已经上传git了,大家伙自取,后来人自取,虽然概率小很多。
git地址:Facade-Pattern-Demo-JS