0%

前端设计模式

这篇文章就比较流水帐了,体会不深,写的东西也很浅显

这是我参与「第四届青训营 」笔记创作活动的的第6天

什么是设计模式

软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。也就是说,设计模式概念的提出,是为了方便开发人员面对相似场景能快速响应当前场景应当使用什么模式,从而化繁为简,快速高效地开发出可复用性和效率都很高的代码。

软件设计中,常见问题的解决方案模型,也就是设计模式。设计模式的总结依赖着历史经验的总结,并且保证与特定语言无关。

根据设计模式的参考书 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用的面向对象软件元素)  中所提到的,总共有 23 种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)——如何创建一个对象、结构型模式(Structural Patterns)——如何灵活地将对象组装成较大的结构、行为型模式(Behavioral Patterns)——负责对象间的高效通信和职责划分。

浏览器中的设计模式

单例模式

所谓单例模式主要目的是确保系统中某个类只存在唯一一个实例,也就是说对于这个类的重复实例的创建始终只返回同一个实例。生活中的单例模式同样也是无处不在,就比如像荒野大镖客这种大型RPG游戏里面,NPC可以有很多个,但是玩家一定只能有一名,如果出现了多名亚瑟,那这个游戏肯定是出bug了。

不难发现单例模式的特点:单例模式存在且只存在一个全局唯一访问对象。单例模式在浏览器中的适用场景有浏览器缓存管理和全局状态管理等。

发布订阅模式

发布订阅模式是一种订阅机制,可在被订阅对象发生改变时告知订阅者。这个模式最大的特点就是开发者无需关心哪些人在订阅,也不需要区分类型。开发者将消息发布在主题或其它命名通道上,订阅者则根据其兴趣订阅主题,从而在主题发生改变时得到通知。浏览器中发布订阅模式应用广泛,例如邮件订阅,上线订阅等。

JavaScript中的设计模式

原型模式

原型模式是复制原有对象来创建新的对象,这是JS对象创建中的基本模式。实质上是一个继承的关系,新的对象基于原有对象可以增添新的功能和成员。

代理模式

代理模式可以自定义地控制对原对象的访问方式,并且允许在更新前后做一些额外处理。代理模式应用于监控、代理工具、前端框架的实现等。

迭代器模式

迭代器模式可以在不暴露数据类型的前提下访问集合中的所有数据,在多种数据结构中都有运用。终于碰到一个熟悉的老朋友了,迭代器我在C++中就有过接触了,主要是用于STL标准模板库中对于容器的操作。我想JS的迭代器应当跟C++的迭代器是同样的功能,即封装内部的数据结构,让用户直接使用迭代器作为接口,方便地操作数据。


总而言之,设计模式的概念也许比较简洁易懂,但是如何将简明的设计模式应用在实际的生产场景中,解决实际问题,这仍然是一个不小的难题,需要开发者有大大小小的开发经验,然后总结出自己的规律。