浅谈JavaScript几种常见设计模式(上)

吐槽君 分类: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命令。一开始输出目录是这样的(未排序):
浅谈JavaScript几种常见设计模式(上)

然而大多数版本是这样的:
浅谈JavaScript几种常见设计模式(上)

后面已经拥有了20多个选项,而且一直在增加。原因是考虑到程序是否需要与用户互动、以及是否要给出必要参数、是否需要特殊输入格式的数据、是否提供格式转换、显示两列还是四列显示等诸多因素。最后ls命令还是保留了逐行显示文件夹下的各个文明名的能力,这样,ls命令就会小得很多。

简单来说,就是别把所有功能都放在一个程序里面。

3.3 快速建立原型

这个大家应该都理解,意思是先搭建原型,后续的细节一步一步来,这样可以快速建立自己对编程的乐趣。嗖?的一下你就搭建了一个原型,你就说你开不开心吧?

3.4 舍弃高效率而取可移植性

程序员经常面临的一个选择就是:高效率和可移植性。这也是一个困难的选择,因为偏高效率往往导致代码不可移植,而选择可移植性却又让软件的性能不尽如人意。虽然高效率软件不会浪费CPU周期,可移植性意味着软件能够运行在许多不同的机器上,在今天的计算环境中,只能运行在一种体系架构上的软件,在潜在市场竞争力会大打折扣。

3.5 采用纯文本来存储数据

  • 文本是通用的可转换格式。文本不一定是性能最好的格式,它只是最通用的。某些应用程序采用的格式都不像文本文件有着广泛的接受度。几乎所有的目标平台都能处理文本编码的数据。
  • 文本文件易于阅读和编辑。人们可以轻松查阅无需任何转换工具,如果数据有误,还可以用标准编辑器对它加以修改,无需为单个文件准备不同类型的编辑器。
  • 简化了Unix文本工具的使用。

3.6 充分利用软件的杠杆效应

  • 良好的程序员编写优秀代码,优秀的程序员借用优秀代码。如果每一行代码都亲自编写会显得你工作进度缓慢,效率低下。
  • 允许他人使用你的代码来发挥软件杠杆效应。指我们应乐于分享,使代码变得更有价值(也就是软件复用)。
  • 将一切自动化。编码代码能够自动执行命令,提高效率。

3.7 使用shell脚本来提高杠杆效应和可移植性

3.8 避免强制性的用户界面

是指用户界面会占系统内存,而命令行效率高,带来安全问题,操作高效。

3.9 让每个程序都成为过滤器

自有计算技术依赖,人们编写的每一个程序都是过滤器。举个简单的例子,鼠标双击弹窗会打开关闭,弹窗作为一个过滤器来响应点击事件,从而影响到显示屏的变化。程序不创建数据,只有人类才会创建数据。计算机只是使我们能够更有地收集和筛选数据。

简单来说,程序是是命令的集合,从输入>运算>输出的过程。这个过程按照我们开发者的想法进行运算,便进行了过滤。

写在最后

本篇(上)文章仅说明学习设计模式需要先了解一些前置知识,不够全面。也仅限于本人现阶段学习之后对设计模式的浅薄理解,后续将把设计模式以系列发布出来。如有错误的地方,肯定各位大佬轻喷并加以斧正,若觉得还行的话,望不吝赐赞,万分感谢?

回复

我来回复
  • 暂无回复内容