JS设计模式

JS设计模式

发布者订阅模式

这种设计模式能够大大下降程序模块之间的耦合度,便于更加灵活的扩展和维护。segmentfault

中介者模式

中介者模式经过统一接口来维护一对多关系,且通讯者之间不须要知道彼此之间的关系,只须要约定好API便可。设计模式

如下状况下能够考虑使用中介者模式:安全

  • 一组定义良好的对象,如今要进行复杂的相互通讯。bash

  • 想经过一个中间类来封装多个类中的行为,而又不想生成太多的子类。函数

代理模式

为其余对象提供一种代理以控制对这个对象的访问。 代理模式使得代理对象控制具体对象的引用。代理几乎能够是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。ui

主要解决:在直接访问对象时带来的问题,好比说:要访问的对象在远程的机器上。在面向对象系统中,有些对象因为某些缘由(好比对象建立开销很大,或者某些操做须要安全控制,或者须要进程外的访问),直接访问会给使用者或者系统结构带来不少麻烦,咱们能够在访问此对象时加上一个对此对象的访问层。spa

单例模式

保证一个类只有一个实例,并提供一个访问它的全局访问点(调用一个类,任什么时候候返回的都是同一个实例)。设计

实现方法:使用一个变量来标志当前是否已经为某个类建立过对象,若是建立了,则在下一次获取该类的实例时,直接返回以前建立的对象,不然就建立一个对象。代理

工厂模式

假如咱们想在网页面里插入一些元素,而这些元素类型不固定,多是图片、连接、文本,根据工厂模式的定义,在工厂模式下,工厂函数只需接受咱们要建立的元素的类型,其余的工厂函数帮咱们处理。code

装饰者模式

装饰者(decorator)模式可以在不改变对象自身的基础上,在程序运行期间给对像动态的添加职责(方法或属性)。与继承相比,装饰者是一种更轻便灵活的作法。

ES7装饰器
function isAnimal(target) {
    target.isAnimal = true
    return target
}

// 装饰器
@isAnimal
class Cat {
    // ...
}
console.log(Cat.isAnimal)    // true



做用于类属性的装饰器:

function readonly(target, name, descriptor) {
    discriptor.writable = false
    return discriptor
}

class Cat {
    @readonly
    say() {
        console.log("meow ~")
    }
}

var kitty = new Cat()
kitty.say = function() {
    console.log("woof !")
}
kitty.say()    // meow ~
复制代码

仅用于我的整理,参考:

JS设计模式

相关文章
相关标签/搜索