Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

设计模式 #32

Open
TokenYangForever opened this issue Mar 15, 2018 · 0 comments
Open

设计模式 #32

TokenYangForever opened this issue Mar 15, 2018 · 0 comments

Comments

@TokenYangForever
Copy link
Owner

简介

  • 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
  • 常见的设计模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。
  • 这里暂时只介绍几个我所知道的、在JavaScript中有具体应用的设计模式。here we go~

单例模式Singleton Pattern

  • 单例模式是最简单的创建型模式的设计模式之一。具体含义为:一个单一类,自己创建一个唯一实例,然后提供给其他对象。在访问请求单例类的实例时,先判断实例是否存在,存在则返回,否则就创建。
  • 保证单例模式的类,只有一个实例。优点在于:减少内存开销,避免了频繁地创建或销毁实例,以及对资源的重复占用。
JavaScript中的模块化
  • es6的import,就是单例模式,你如果重复import同一个模块,并不会产生多个实例,而是引用的同一个。比如下面代码,a和b其实引用的同一个实例
import a from '../common.js'
import b from '../common.js'
console.log(a === b) // true
  • node的commonJs,同样的在node环境下的模块化规范也是单例模式,多次require引用相同模块其实引用的是同一个实例。可以在node的repl里输入下面代码看看:
var a = require('fs')
var b = require('fs')
a === b // true

访问者模式

  • 访问者模式是一种较为复杂的行为型模式,它包含访问者和被访问元素两个主要组成部分。这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。
  • 访问者模式可以使得用户在不修改现有系统的情况下扩展系统的功能,为这些不同类型的元素增加新的操作。
babel 中的visitor
  • babel转化代码的工作原理在于:转化代码为AST=>处理转化AST=>AST转化为最终代码。转化AST的过程就涉及到访问者模式,AST中的各个节点就是被访问元素,babel的插件配置就是访问者。AST根据不同的访问者visitor,会进行不同的操作,最后生成不同的结果。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant