享元模式
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>