美文网首页
享元模式

享元模式

作者: 0说 | 来源:发表于2018-11-27 22:43 被阅读0次
<body>
    $('div').click(function(){})
    $('div2').click(function(){})
    这2个对象之前有很多东西都是一样的

    有大量相同的类、对象存在 享元模式就是避免这种情况发生

    <script>
        let Food = function(name, money, cooker, people, num){
            this.name = name
            this.money = money
            this.cooker = cooker
            this.people = people
            this.num = num
        }

        new Food('牛肉面', 18, 'aFang', 'aLi', 1)
        new Food('牛肉面', 18, 'aFang', 'agou', 1)
        // name money cooker 三个一样会被创建三次会造成内存浪费


        // 利用享元模式先把共同的保存起来
        let ComonFood = function(name, money, cooker,){
            this.name = name
            this.money = money
            this.cooker = cooker
        }

        // 有没有共同的处理函数 
        let FoodDeal = function(){
            let foodList = {}
            return {
                createFood(name, money, cooker){
                    let foodName = foodList[name]
                    // 这里判断一下有没有这个食物 有的话直接返回 没有再创建
                    if(foodName){
                        console.log(66)
                        return foodList
                    } else {
                        console.log(55)
                        let food =  new ComonFood(name, money, cooker)
                        foodList[name] = food
                        return food
                    }
                    console.log(foodList)
                }
            }
        }()

        // console.log(FoodDeal.createFood('牛肉面', 18, '阿飞'))
        // console.log(FoodDeal.createFood('牛肉面', 18, '阿飞'))
        // console.log(FoodDeal.createFood('牛肉面2', 18, '阿飞'))
        // console.log(FoodDeal.createFood('牛肉面2', 18, '阿飞'))
        
        // 最终处理函数
        let FoodSystem = function(){
            let foodData = {}; // 闭包
            return function (name, money, cooker, people, num){
                let food = FoodDeal.createFood(name, money, cooker)
                // 这里是以人为单位
                if(foodData[people]){
                    foodData[people].push({
                        food: food,
                        people: people,
                        num: num
                    }) 
                } else {
                    foodData[people] = [{
                        food: food,
                        people: people,
                        num: num
                    }]
                }

                console.log(foodData[people])
            }
        }()

        FoodSystem('牛肉面', 18, '阿飞', '阿里', 1)
        FoodSystem('牛肉面', 18, '阿飞', '阿里', 1)
        FoodSystem('牛肉面2', 18, '阿飞', '阿飞', 1)
        FoodSystem('牛肉面', 18, '阿飞', '阿里', 1)
    </script>
</body>

相关文章

  • 设计模式之享元模式(flyweight模式)

    引入享元模式 享元模式的实例 享元模式的分析 引入享元模式 flyweight是轻量级的意思,指的是拳击比赛中选手...

  • 第4章 结构型模式-享元模式

    一、享元模式的简介 二、享元模式的优缺点 三、享元模式的实例

  • 享元模式

    一、享元模式介绍 二、享元模式代码实例

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

  • 设计模式之——享元模式

    1 享元模式的定义 享元模式:使用共享对象可有效地支持大量细粒度的对象。享元模式是池技术的重要实现方式。享元模式的...

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • Java设计模式(三)

    talk is cheap show me the code 享元模式 享元模式 责任链模式 责任链模式Filte...

  • 结构型-Flyweight

    享元模式原理与实现 享元模式(Flyweight Design Pattern) 所谓“享元”,顾名思义就是被共享...

网友评论

      本文标题:享元模式

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