javascript中的设计模式(一)

单例模式(single)

单例模式简单来说就是向外只输出一个实例,对于js来说,一个字面量,一个数组都可以说是单例。
单例的应用场景:
比如我们有一个事件管理器(观察者模式),我们需要他在一处订阅另一处发布,那就要保证两处引用的是同一实例,那么你写的文件向全局输出的就应该只有一个实例。

class EventBus {
 // ```
}
const eventBus = new EventBus();
export default eventBus;

优化点:
单例因为需要全局唯一,所以生成的时间点有时会很重要,如果一个实例开销巨大,我们并不像再声明时就执行他,而需要在第一次引用时才去生命,那我们需要用到懒汉单例的形式。比如:

class EventBus {
//
}
let eventBus;
export default function getInstance() {
  return eventBus || (eventBus = new EventBus())
}

以上第一种我们称为饿汉式单例,后者称为懒汉式单例。
他们在后端语言中各有优缺点,懒汉式节省资源,而饿汉式线程安全。但因为js本身就是单线程的语言,所以如果仅仅是写web前端的代码的话,我们可以尽量应用懒汉式单例的模式。

工厂模式(factory)

工厂模式根据不同条件返回不同的实例,我们最常说的工厂模式的作用就是隐藏new
比如Array.from 来代替 new Array 我们就可以说是一种工厂模式
工厂模式非常重要,因为他对开闭原则与接口原则有非常重要的实践,他也是最不被理解的一种模式之一,因为他让本来很简单的代码复杂度直线上升。
首先,工厂模式的写法是为了以后扩展的方便,之后的逻辑变更可以通过扩展而不是修改代码来完成,那么你的代码就是成功的。
但是,因为工厂模式涉及到了很多接口,类,抽象,重写的概念,所以在js里不能够很好的实践,或者说,我们平常写代码,并不会应用这些对象的概念来编写代码,毕竟js本身还是函数为第一顺位的语言,也许当ts成为主流时,他的在前端的实践意义会变得更大。
具体的代码就不写了,简单的很简单会觉得像废话,复杂的很复杂,但在js里我不觉得有实践意义。

原型模式(prototype)

原型模式的定义: 是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象
而js的new这一过程很好的实践了上面的这句话:
创建一个空对象,让构造函数的this指向这个空对象,并执行该构造函数。设置原型链,将对象的proto成员指向了构造函数对象的prototype成员对象。

建造者模式(builder)

通过分布,拆分等方式构建复杂逻辑的过程,可以成为建造者模式。
其实我们应用vue以及react通过简单组件构建复杂页面,就是建造者模式。

以上四种设计模式称为创建型模式。工厂模式的抽象与方法模式定义由于个人觉得实践场景不突出,所以没有单独细分。

这四种都是创建时经常用到的类型,比如我们构建复杂页面时对模块的拆分其实就是建造者模式,我们寻求一个文件在全局的唯一就是在应用单例模式。再比如boots代码里代替你实例化boots的对象的过程就可以称为工厂。

但我们不必纠结于他到底是什么设计模式,毕竟设计模式也不过是应用中重复开发与优化解决方案的总结,也许你不知道这些,但其实在不知不觉中,已经开始在应用设计模式了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,096评论 0 21
  • 创建型模式 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设...
    隔墙送来秋千影阅读 2,644评论 0 11
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32
  • 创建型模式 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设...
    liuyang7519阅读 320评论 0 2
  • 1.简单工厂模式(静态工厂方法) (1)模式动机:只要知道水果名就可以得到相应的水果 (2)在简单工厂模式中,可以...
    XMUBeike阅读 607评论 0 0