美文网首页
前端设计模式及应用

前端设计模式及应用

作者: 我叫Aliya但是被占用了 | 来源:发表于2019-04-16 13:32 被阅读0次

曾经我做后端的时候,前端不加班,现在我做前端了,后端不加班。
曾经我做后端的时候,被设计模式折磨,现在我做前端了,还tm得整这个。
我们(我)平复下心情,来看看前端常用的设计模式有哪些,以及在前端怎么还会用到设计模式。

单例模式

是保证一个类只有一个实例,并且提供一个访问它的全局访问点
解决问题:某些方法只允许执行一次,比如记录本地日志(为提高效率,不关闭日志文件,一直追加),因为在win下只允许一个线程打开文件,所以只能有一个实例去操作

var Single = (function () {
    var instance
    function getLogFile() {
    return fs.openSync('c:\\log.txt', 'w')
  }

  return {
    getInstance: function () {
      if (!instance) {
        instance = { fd: getLogFile() } 
      }
      return instance
    }
  }
})()

Single.getInstance().fd

工厂模式

以抽象类约束其实体类行为,用工厂类选择要实例化的实体类,产出拥有相同功能的对象(在后端语言中返回类型是抽象类)
解决问题:主要解决接口选择的问题,如日志记录,可以使用本地日志或者日志实时上报,以后还可能有其它,但在记录时不去关心日志的具体记录实现

// 定义接口
var iLog = function () { this.msg = '' }
iLog.prototype = {
    logError: function() { return new Error('抽象方法不能调用'); },
    logWarn: function() { return new Error('抽象方法不能调用'); }
};

// 实现接口
var txtLog = function (msg) { this.type = 'txt'; this.msg = msg }
txtLog.prototype = new iLog()
txtLog.prototype.logError = function() { return console.info('loged in local txt', this.msg); }
txtLog.prototype.logWarn = function() { return console.info('loged in local txt', this.msg); }

var nwLog = function () { this.type = 'nw' }
nwLog.prototype = new iLog()
nwLog.prototype.logError = function() { return console.info('loged in network', this.msg); }
nwLog.prototype.logWarn = function() { return console.info('loged in network', this.msg); }

// factroy
var logFactroy = function (type, msg) {
  switch (type) {
    case 'txt': return new txtLog(msg);
    case 'net': return new nwLog(msg);
  }
}

var log007 = logFactroy('txt', 'error on P32')
log007 instanceof iLog
> true
log007.logError()
> loged in local txt error on P32

抽象工厂

围绕一个超级工厂创建其他工厂。
解决问题:工厂模式的产品有多个,比如日志功能除了自动上报,还要有用户提交反馈的功能

var iLog = function () { this.msg = '' }
iLog.prototype = {
    logError: function() { return new Error('抽象方法不能调用'); },
    logWarn: function() { return new Error('抽象方法不能调用'); }
};

var iFeedback = function () { this.msg = '' }
iFeedback.prototype = {
    logError: function() { return new Error('抽象方法不能调用'); },
    logWarn: function() { return new Error('抽象方法不能调用'); }
};

// 抽象工厂方法
var VehicleFatory = function(subType, superType) {
  switch (superType) {
    case 'log': subType.prototype = iLog()
    case 'feedback': subType.prototype = iFeedback()
  }
};

// 创建产品子类继承相应的产品簇抽象类
var txtLog = function (msg) { this.type = 'txt'; this.msg = msg }
//抽象工厂实现对Car抽象类的继承
VehicleFactory(txtLog, 'Log');
txtLog.prototype.logError = function() { return console.info('loged in local txt', this.msg); }
txtLog.prototype.logWarn = function() { return console.info('loged in local txt', this.msg); }

new txtLog('error on P32').logError()
> loged in local txt error on P32

相关文章

  • 前端设计模式及应用

    曾经我做后端的时候,前端不加班,现在我做前端了,后端不加班。曾经我做后端的时候,被设计模式折磨,现在我做前端了,还...

  • 设计模式 | 解释器模式及典型应用

    微信原文:设计模式 | 解释器模式及典型应用 博客原文:设计模式 | 解释器模式及典型应用 本文主要介绍解...

  • JavaScript享元模式与性能优化

    摘要 享元模式是用于性能优化的设计模式之一,在前端编程中有重要的应用,尤其是在大量渲染DOM的时候,使用享元模式及...

  • 脉脉

    职位描述: 1. 设计并编写web前端架构及应用; 2. 根据产品需求,设计前端页面,并配合服务端实现页面的渲染及...

  • 享元模式(Flyweight)

    [转自]设计模式 | 享元模式及典型应用[https://juejin.cn/post/6844903683860...

  • 前言

    本系列文章意在学习、分享设计模式在前端中的应用,大概每周至少一更。

  • 《从零开始学Swift》学习笔记(Day 63)——Cocoa

    《从零开始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式 原创文章,欢迎...

  • 设计模式 | 策略模式及典型应用

    本文的主要内容: 介绍策略模式 示例商场购物打折策略的实现 策略模式总结 源码分析策略模式的典型应用Java Co...

  • 设计模式 | 组合模式及典型应用

    本文的主要内容: 介绍组合模式 示例 组合模式总结 源码分析组合模式的典型应用java.awt中的组合模式Java...

  • 设计模式 | 外观模式及典型应用

    前言 本文的主要内容: 介绍外观模式 示例自己泡茶到茶馆喝茶 外观模式总结 外观模式的典型应用spring JDB...

网友评论

      本文标题:前端设计模式及应用

      本文链接:https://www.haomeiwen.com/subject/ljdswqtx.html