andy Wong's Blog

知道的越多,不知道的越多


  • 首页

  • 归档

  • 标签

  • 分类

  • 关于

js设计模式-外观模式

发表于 2018-10-31 | 分类于 JavaScript

外观模式基础

定义:外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模块定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式不仅简化类中的接口,而且对接口与调用者也进行了解耦。外观模式经常被认为开发者必备,它可以将一些复杂操作封装起来,并创建一个简单的接口用于调用。

使用场景:外观模式经常被用于JavaScript类库里,通过它封装一些接口用于兼容多浏览器,外观模式可以让我们间接调用子系统,从而避免因直接访问子系统而产生不必要的错误。

外观模式的优势是易于使用,而且本身也比较轻量级。但也有缺点外观模式被开发者连续使用时会产生一定的性能问题,因为在每次调用时都要检测功能的可用性。

阅读全文 »

js设计模式-桥接模式

发表于 2018-10-31 | 分类于 JavaScript

桥接模式定义
定义:桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化。
桥接设计模式是许多其他设计模式的基础,比如装饰模式, 代理模式都或多或少看到他的影子, 在面向对象设计中最重要的一个特点就是继承, 然而作为拓展类的功能的方式有两种 – 继承和桥接, 桥接用我简单的理解就是放弃使用继承的方式拓展类, 而是采用包含另一个具有一定功能的对象来拓展类。

使用场景:事件回调函数、请求接口之间进行桥接、用于连接公开的API代码和私用实现的代码
根据javascript语言的特点,我们将其简化成2个角色:
(1)扩充抽象类
(2)具体实现类

阅读全文 »

js设计模式-迭代器模式

发表于 2018-10-31 | 分类于 JavaScript

迭代器模式介绍

定义:迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
使用的好处:迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。

阅读全文 »

js设计模式-适配器模式

发表于 2018-10-31 | 分类于 JavaScript
适配器模式介绍定义:适配器模式(Adapter)是将一个类(对象)的接口(方法或属性)转化成客户希望的另外一个接口(方法或属性),适配器模式使得原本由于接口不兼容而不能一起工作的那些类(对象)可以一些工作。速成包装器(wrapper)。使用场景:适配器模式往往用于适配两个接口不兼容的问题,在js中应用更为广泛,比如适配两个代码库、适配前后端数据。 因此应对这种场景,我们可以很快地想到可以用适配器模式来解决这个问题。 参数适配1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 ...
阅读全文 »

js设计-装饰者模式

发表于 2018-10-31 | 分类于 JavaScript

装饰者模式

定义:装饰者(decorator)模式能够在不改变对象自身的基础上,在程序运行期间给对象动态的添加职责。
装饰者用于通过重载方法的形式添加新功能,该模式可以在被装饰者前面或者后面加上自己的行为以达到特定的目的。
与继承相比,装饰者是一种更轻便灵活的做法。

普通对象被装饰者包裹起来,就形成了装饰者模式。
举例:
雷霆战机(吃道具的例子)

阅读全文 »

js设计模式-中介模式

发表于 2018-10-31 | 分类于 JavaScript

中介者模式

定义:中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,
所有的相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,
只需要通知中介者对象即可。中介者使各对象之间耦合松散,而且可以独立地改变它们之间的交互。
中介者模式使网状的多对多关系变成了相对简单的一对多关系。
举例:
手机购买页面(颜色、数量、内存、价格)
MVC模式(控制层便是位于表现层与模型层之间的中介者。)
我们应该很熟悉 MVC 三层模型实体模型(Model)、视图表现层(View)还有控制层(Control/Mediator)。

1
2
3
4
5
6
7
8
9
10
/** 模擬 Model, View, Controller */
var M = {}, V = {}, C = {};
/** Model 负责存放资料*/
M.data = "hello world";
/** View 负责将资料输出到页面*/
V.render = (M) => { alert(M.data); }
/** Controller 作为一个M和V的桥梁*/
C.handleOnload = () => { V.render(M); }

window.onload = C.handleOnload;

阅读全文 »
1…789…13
andy Wong

andy Wong

前端渣渣辉

78 日志
15 分类
23 标签
GitHub
推荐阅读
  • 掘金
  • segmentfault
  • Web前端导航
  • 印记中文
  • 阮一峰ES6书籍
Copyright © 2015 - 2021 Powered By - andy Wong
Theme by ©next
Hosted by Github Pages