享元模式

2018-11-27  本文已影响0人  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>
上一篇 下一篇

猜你喜欢

热点阅读