zoukankan      html  css  js  c++  java
  • 浅谈Javascript设计模式

    什么是模式

    模式是一种可复用的解决方案,可用于解决软件设计中遇到的常见问题。

    也就是说用来解决常见问题的可复用的解决方案。

    常见的js设计模式

    Constructor(构造器)模式

    Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。

    这是我们最常用的一种设计模式。

    Object构造器

    比如在js中新建一个对象,就是以js中的Object构造器,新建一个Object的实例,这就是构造器模式。

    (举例)

    基本Constructor构造器

    除了js自带的Object构造器,还可以自己通过构造函数,写一个基本的Constructor构造器。通过构造函数新建的实例也是用的构造器模式。

    (举例)

    Module(模块)模式

    现在js都是模块化编程,所以在模块化这方面也有很多的模式。

    最开始的时候,我们都用一个对象来分割模块,把所有的东西通过字面量写到一个对象里取,这种模式就是对象字面量表示法。

    (举例)

    对象字面量表示法把属性和方法都直接暴露在外,但是我们需要一些私有的属性和方法的时候,对象字面量表示法就很不方便了。所以在此基础上改进,我们有了Module模式。

    Module模式使用闭包封装“私有“状态和组织。它提供了一种包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域并与别的开发人员的接口发生冲突。

    通过该模式,只需返回一个公有API,而其他的一切则都维持在私有闭包里。

    (举例)

    Revealing Module(揭示模块)模式

    Revealing Module,揭示模块模式,其实是module模式的升级版。它能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象,它拥有指向私有函数的指针,该函数是他希望展示为公有的方法。

    (举例)

    Singleton(单例)模式

    单例模式,就是限制了类的实例化次数只能一次。在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,他会简单返回该对象的应用。

    比如,可以用Singleton充当共享资源命名空间,从全局命名空间中隔离出代码实现,从而为函数提供单一访问点。

    (举例)

    Observer(观察者)模式

    观察者模式就是,一个对象(称为subject)维持一系列依赖于它(观察者)的对象,将有关状态的任何变更自动通知给它们。

    一系列对象(观察者)依赖于一个对象(subject),这个对象(subject)维持着和这些观察者对象的关系,有关状态发生的任何变更都将由这个对象(subject)自动通知给这一系列的对象(观察者)。

    也就是,一群观察者依附在目标对象上,然后,当具体观察者的具体目标发生变化时,具体目标向目标发出通知,然后通过目标对象将这个具体目标的变化通知到所有的观察者。

    (举例)

    比较概念的解释是,目标和观察者是基类,目标提供维护观察者的一系列方法,观察者提供更新接口。具体观察者和具体目标继承各自的基类,然后具体观察者把自己注册到具体目标里,在具体目标发生变化时候,调度观察者的更新方法。

    比如有个“天气中心”的具体目标A,专门监听天气变化,而有个显示天气的界面的观察者B,B就把自己注册到A里,当A触发天气变化,就调度B的更新方法,并带上自己的上下文。

    (举例)

    Publish/Subscribe(发布/订阅)模式

    比较概念的解释是,订阅者把自己想订阅的事件注册到调度中心,当该事件触发时候,发布者发布该事件到调度中心(顺带上下文),由调度中心统一调度订阅者注册到调度中心的处理代码。

    比如有个界面a是实时显示天气,它就订阅天气事件(注册到调度中心c,包括处理程序),当天气变化b时(定时获取数据),b就作为发布者发布天气信息到调度中心c,调度中心就调度订阅者a的天气处理程序。

    Publish/Subscribe模式使用了一个主题/事件通道,这个通道介于希望收到通知(订阅者)的对象和激活时间的对象(发布者)之间。该事件系允许代码定义应用程序的特定事件,这些事情可传递自定义参数,自定义参数包含订阅者所需的值。其母的是避免订阅者和发布者之间产生依赖关系。

    (举例)

    观察者模式和发布/订阅模式还是很像的,都是通过注册到某个目标里,然后目标发生改变的时候,通过目标上的接口将这个改变通知到所有预先注册过的对象,

    也就是说,这两种模式都带有订阅和发布的功能,发布/订阅模式多了一个中间者,可以避免订阅者(观察者)和发布者(目标)直接耦合。

    Mediator(中介者)模式

    Mediator模式存进松散耦合的方式是:确保组件的交互式通过这个中心点来处理的,而不是通过显示地引用彼此。

    中介者模式是指用一个中介对象来封装一系列的对象交互。中介者使个对象不需要显示的相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单地说,将原来两个直接引用或者依赖的对象拆开,在中间加入一个“中介”对象,使得两头的对象分别与“中介”对象引用或者依赖。

    中介者模式并不带有监听改变和广播的功能,只是为其他的对象提供一个中介,使对象之间的耦合关系减弱。

    (举例)

    Prototype(原型)模式

    Prototype模式为一种基于现有对象模板,通过克隆方式创建对象的模式。

    也就是深复制。也就是传值赋值。

    (举例)

    Command(命令)模式

    不懂,无法解释

    Facade(外观)模式

    不懂,无法解释

    Factory(工厂)模式

    是一种创建型模式。它不显式的要求使用一个构造函数。Factory提供一个通用的接口来创建对象。

    比如jQuery。常用的$(‘#wrapper’)就是一个工厂模式,通过这个$之后,这个就变成了jQuery对象,然后就具有jQuery对象的各种属性和方法。

    Mixin模式

    不懂,无法解释

    Decorator(装饰者)模式

    这个,在es7里有用到。

    简单的说,Decorator提供了将行为动态添加至系统的现有类的能力。其想法是,装饰本身对于类原有的基本功能来说并不是必要的;否则,它就可以被和并到超类本身了。

    装饰者可以用于修改现有的雄,希望在系统中为对象添加额外的功能,而不需要大量修改使用它们的底层代码。

    Flyweight(享元)模式

    不懂,无法解释

  • 相关阅读:
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) C. Constellation
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) B Guess the Permutation
    codeforces Wunder Fund Round 2016 (Div. 1 + Div. 2 combined) A Slime Combining(栈)
    在服务器IIS中添加新网站后打开网站需要用户名和密码时怎么办?
    简易通讯录
    先列出所有数据库,再删除其中一个数据库。
    数据库创建mysql_query($sql,$link)
    显示所有数据库 mysql_fetch_object()
    读取数据库数据
    PHP警告错误处理办法
  • 原文地址:https://www.cnblogs.com/yupire/p/9683319.html
Copyright © 2011-2022 走看看