zoukankan      html  css  js  c++  java
  • JavaScript设计模式—工厂模式

    工厂模式介绍

    将new操作符单独进行封装,遇到new时,就要考虑是否该使用工厂模式

    举一个生活当中的示例:

    你要去购买汉堡,直接点餐,取餐,不会自己动手做,商店要“封装” 做汉堡的工作,做好直接给购买者,而不是商店给你面粉,工具让你自己去做

    UML类图和代码示例

    class Product {
      constructor (name){
        this.name = name
      }
      init () {
        console.log(`init:${this.name}`)
      }
      fn () {
        console.log(`fn:${this.name}`)
      }
    }
    
    class Creator {
      create (name) {
        return new Product(name)
      }
    }
    
    // 测试
    let creator = new Creator()
    let p1 = creator.create('p1')
    p1.init()
    p1.fn()

    设计原则验证

    构造函数和创建者分离,符合开放封闭原则

    场景示例

    jQuery - $('div')

    Jquery就是工厂模式,向外面暴露一个方法,方法返回一个JQuery对象

    class jQuery {
      constructor(seletor) {
        let slice = Array.prototype.slice
        let dom = slice.call(document.querySelectorAll(seletor))
        let len = dom ? dom.length : 0
        for(let i = 0; i < len; i++){
          this[i] = dom[i]
        }
        this.length = len
        this.seletor = seletor || ''
      }
      append(node){
    
      }
      addClass(name){
    
      }
      html(data){
    
      }
    }
    window.$ = function (selector) {
      // 工厂模式
      return new jQuery(selector)
    }
    
    
    // 测试代码
    var $p = $('p')
    console.log($p)
    console.log($p.addClass)

    React.createElement(创建虚拟DOM对象的方法)

    // 创建虚拟DOM对象
    const vDom1 = React.createElement('h1', {id: myId.toLowerCase()}, msg.toUpperCase())
    
    //渲染虚拟DOM
    ReactDOM.render(vDom1, document.getElementById('test1'))

    vue异步组件

  • 相关阅读:
    MYSQL数据库查看被锁状态以及解锁
    MongoDB命令
    代码重构
    笔试常见之C类型转换
    WeakReference(弱引用)(转)
    Linux ubuntu16.04下vim的安装与配置
    mysql Access denied for user root@localhost之错误解决方法(错误码:1045)
    mysql服务无法启动报错1067解决办法 (mysql启动错误1067)
    js的ajax封装
    windows下apache tomcat整合
  • 原文地址:https://www.cnblogs.com/LO-ME/p/4913718.html
Copyright © 2011-2022 走看看