优美编程

在前端身边的设计模式

2019-11-27  本文已影响0人  小遁哥

导读

时至今日,前端代码的可读性、可维护性绝对是排在第一位的。
提到设计模式就要说一下Java这种强类型语言,GOF提出的24中设计模式可以看作抽象、封装、继承、多态不同'剂量'的实现,侧重点不一样。
实际应用当中更多的是将其作为参考,完全可以自己调制剂量。
达到代码的高内聚、低耦合,提升性能,合理划分代码、优化数据传递,减少判断等

设计模式分类

创建型模式

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。
这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

结构型模式

这些设计模式关注类和对象的组合。
继承的概念被用来组合接口和定义组合对象获得新功能的方式。

行为型模式

这些设计模式特别关注对象之间的通信。

设计模式就在身边

工厂模式

document.createElement,可以创建inputdiv,因为他们都是HTML元素,不会对外暴漏的具体的创建细节。

抽象工厂模式

创建按钮、单选按钮、输入框,每个都是一个单独的工厂,创建表单则是一个超级工厂。
围绕一个超级工厂创建其他工厂。

比如一个厂家生产电脑,也生产鼠标垫、键盘这些。

原型模式

DOM cloneNode方法,用于创建当前对象的克隆。
当直接创建对象的代价比较大时,则采用这种模式

享元模式

复用已经创建好的对象,没有在创建新的。
比如DOM节点只是属性更改了,并不用删除它再创建一个新的加进去。

外观模式

我们使用iview组件,只需要关注对外提供的属性、事件、插槽这些,降低自身的复杂程度。

责任链模式

事件冒泡、异常捕获,每一步都能对任务做处理。

适配器模式

当后台接口返回的数据格式与第三方组件渲染需要的格式有差异,对数据本身做转换,作为不兼容接口间的桥梁。
美国电器 110V,中国 220V,就要有一个适配器将 110V 转化为 220V

装饰器模式

String.prototype.print = function(){};在原型链上添加一个函数。
不改变对象的结构,添加新的功能。

代理模式

Object.defineProperty 能对一个属性的取值、赋值加以控制。

解释器模式

HTML代码、正则表达式,浏览器解析执行,提供了评估语言的语法或表达式的方式

访问器模式

调用console.log ,能够对不同的数据类型做处理。

单例模式

windowbody,全局只有一个。

观察者模式

Vue中的数据绑定,当数据发生变化时,有关联的计算属性、DOM元素也会更新。
对象之间存在一对多关系。

空对象模式

用Jquery时,没有查到元素也可以调用上面的方法,减少null判断和错误的发生。

命令模式

使用ajax,发起get、post请求,请求以命令的形式包裹在对象中,并传给调用对象

组合模式

区域、文件夹这些树形结构。

迭代器模式

用for of遍历数组,这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示,还可以遍历Map、Set

模板模式

编写Vue组件时对外提供插槽,特定部分的实现可以延迟到使用组件的时候。

桥接模式:

再调用canvas上的API时,对于背景,我们可以设置普通颜色、渐变,对于图像我们话正方向,画长方形。
将抽象部分与实现部分分离,使它们都可以独立的变化。

策略模式

img的src属性,支持http协议,也支持base64码。
可以在运行时更改,定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
比如去上班,可以坐公交、坐地铁。

状态模式

将一个div的display设置位block或none时,一些属性的值也会发生变化,对象内部状态发生变化。

过滤器模式

使用filter过滤数组,这种模式允许开发人员使用不同的标准来过滤一组对象

备忘录模式

使用编辑器的时候,可以撤销和恢复操作

中介者模式

点击按钮,触发按钮的回调,浏览器在这里充当了中介,降低通信的复杂性。

设计模式

上一篇 下一篇

猜你喜欢

热点阅读