zoukankan      html  css  js  c++  java
  • JavaScript-工厂模式

    工厂模式

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

    示例

    当你去购买汉堡,直接点餐,取餐,不会自己亲手做

    商店要“封装”做汉堡的工作,做好直接卖给买者

    class Product {
        constructor(name) {
            this.name = name
        }
        init(){
            alert('init')
        }
        fun1(){
            alert('fun1')
        }
        fun2(){
            alert('fun2')
        }
    }
    
    class Creator {
        creat(name) {
            return new Product()
        }
    }
    
    // 测试
    let creat = new Creator()
    let p = creat.creat('p1')
    p.init()
    p,fun1()
    
    

    工厂模式应用场景

    jQuery-$('div')

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

    React.createElement

    react如何做?

    //jsx语法
    var profile = <div>
        <img src="avatar.png" className="profile" />
        <h3>{[user.firstName,user.lastName].join('')}</h3>
    </div>
    
    /*react手写dom*/
    var profile = React.CreateElement("div",null,
        React.CreateElement("img",{src: "avatar.png", className: "profile"}),
        React.CreateElement("h3", null,[user.firstName, user.lastName].join(" "))
    )
    
    /*react内部代码*/
    
    class Vnode(tag, attrs, children) {
        // ...省略内部代码...
    }
    React.CreateElement = function (tag, attrs, children) {
        return new Vnode(tag, attrs, children)
    }
    

    vue异步组件

    
    Vue.component('asycn-example', function (reslove, reject) {
        setTimeout(function() {
            reslove({
                template: '<div>I am async!</div>'
            })
        })
    })
    

    设计原则验证

    • 构造函数和创建者分离
    • 符合开饭封闭原则
  • 相关阅读:
    S4全球总决赛(2)南邮NOJ2059
    S4全球总决赛(2)南邮NOJ2059
    S4全球总决赛(1) 南邮NOJ
    S4全球总决赛(1) 南邮NOJ
    S4全球总决赛(1) 南邮NOJ
    【Linux】鸟哥的Linux私房菜基础学习篇整理(五)
    【Linux】鸟哥的Linux私房菜基础学习篇整理(四)
    【HDOJ】2428 Stars
    【Linux】鸟哥的Linux私房菜基础学习篇整理(三)
    【Linux】鸟哥的Linux私房菜基础学习篇整理(二)
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12238381.html
Copyright © 2011-2022 走看看