浅谈JavaScript几种常见设计模式(上)
1 前言
不知道有没有同学和我一样的感觉,就现阶段而言,已经不满足局限在写业务方面,感觉陷入了迷茫。逛遍了各大技术论坛,有时候划水摸鱼,也有时看各位大佬的技术文章,只能感叹自己为啥这么菜,每天被自己菜醒的感觉可还行? 又不想做一条咸鱼,所以最近就开始研究起了设计模式,想让自己的代码更精致一些。
2 面向对象(OOP)
说到设计模式,必然要讲到面向对象。面向对象
,全称面向对象的程序(Object-oriented programming ,OOP)
.
MDN是这样描述的:首先,我们从高维度且简化的角度看看 面向对象的程序(Object-oriented programming ,OOP)是什么。我们将简单描述OOP,因为OOP该概念已变得很复杂,如果完整地描述OOP将使读者难以理解。OOP 的基本思想是:在程序里,我们通过使用对象去构建现实世界的模型,把原本很难(或不可)能被使用的功能,简单化并提供出来,以供访问。
简言之,复杂的模型简单化,其思想万物皆对象,一切花草树木,鱼虫鸟兽都可以物化为对象
。
举个?子:
每个对象都有其基本信息。就拿我们熟知的人
来说,我们可以获取到很多信息(性别,年龄,身高,兴趣,技能等等),我们可以把这些信息进行抽出来进行程序化,即复杂的事物简单化。
面向对象很多人都理解,本篇文章目的不在于此,也无法将其通篇细述,故这里不再赘述,感兴趣的同学可以查阅MDN面向对象
3 设计原则
讲到设计模式,必然要提及设计原则,提及设计原则我们可以先了解一下设计哲学。最近看过《LUNIX/LINUX设计思想》
这本书,虽然是关于java的设计模式,但一些设计理念是相通的,所以做为课代表想和大家总结分享一下?
3.1 小即是美
如果你准备开始编写一个程序,请从小规模开始并尽量保持。无论是设计简单的过滤器、图形软件包还是庞大的数据库,你应该尽自己所能将大的规模降至最小,实用即可。请抵制诱惑避免让他成为庞然大物,软件开发应该力求简单。
简单来说,就是小程序易于理解和维护,任何伟大的程序都是从小程序做起的,最后使得1+1>2.
3.2 让每个程序只做好一件事
书中举了一个例子,Unix的ls
命令。一开始输出目录是这样的(未排序):
然而大多数版本是这样的:
后面已经拥有了20多个选项,而且一直在增加。原因是考虑到程序是否需要与用户互动、以及是否要给出必要参数、是否需要特殊输入格式的数据、是否提供格式转换、显示两列还是四列显示等诸多因素。最后ls命令还是保留了逐行显示文件夹下的各个文明名的能力,这样,ls
命令就会小得很多。
简单来说,就是别把所有功能都放在一个程序里面。
3.3 快速建立原型
这个大家应该都理解,意思是先搭建原型,后续的细节一步一步来,这样可以快速建立自己对编程的乐趣。嗖?的一下你就搭建了一个原型,你就说你开不开心吧?
3.4 舍弃高效率而取可移植性
程序员经常面临的一个选择就是:高效率和可移植性。这也是一个困难的选择,因为偏高效率往往导致代码不可移植,而选择可移植性却又让软件的性能不尽如人意。虽然高效率软件不会浪费CPU周期,可移植性意味着软件能够运行在许多不同的机器上,在今天的计算环境中,只能运行在一种体系架构上的软件,在潜在市场竞争力会大打折扣。
3.5 采用纯文本来存储数据
- 文本是通用的可转换格式。文本不一定是性能最好的格式,它只是最通用的。某些应用程序采用的格式都不像文本文件有着广泛的接受度。几乎所有的目标平台都能处理文本编码的数据。
- 文本文件易于阅读和编辑。人们可以轻松查阅无需任何转换工具,如果数据有误,还可以用标准编辑器对它加以修改,无需为单个文件准备不同类型的编辑器。
- 简化了Unix文本工具的使用。
3.6 充分利用软件的杠杆效应
- 良好的程序员编写优秀代码,优秀的程序员借用优秀代码。如果每一行代码都亲自编写会显得你工作进度缓慢,效率低下。
- 允许他人使用你的代码来发挥软件杠杆效应。指我们应乐于分享,使代码变得更有价值(也就是软件复用)。
- 将一切自动化。编码代码能够自动执行命令,提高效率。
3.7 使用shell脚本来提高杠杆效应和可移植性。
3.8 避免强制性的用户界面
是指用户界面会占系统内存,而命令行效率高,带来安全问题,操作高效。
3.9 让每个程序都成为过滤器。
自有计算技术依赖,人们编写的每一个程序都是过滤器。举个简单的例子,鼠标双击弹窗会打开关闭,弹窗作为一个过滤器来响应点击事件,从而影响到显示屏的变化。程序不创建数据,只有人类才会创建数据。计算机只是使我们能够更有地收集和筛选数据。
简单来说,程序是是命令的集合,从输入>运算>输出
的过程。这个过程按照我们开发者的想法进行运算,便进行了过滤。
写在最后
本篇(上)文章仅说明学习设计模式需要先了解一些前置知识,不够全面。也仅限于本人现阶段学习之后对设计模式的浅薄理解,后续将把设计模式以系列发布出来。如有错误的地方,肯定各位大佬轻喷并加以斧正,若觉得还行的话,望不吝赐赞,万分感谢?