作用

主要用于做性能优化、运用共享技术有效的支持大量的细粒度对象,避免对象间拥有相同内容造成多余开销! 核心思想:是对象池、使用对象的时候判断对象池是否有、优先从对象池获取对象

  1. // 需求展示表格数据、表格每次展示五条数据并且有分页效果
  2. //创建一个享元类、维护需要展示的五个dom、每次分页都只修改这五个dom元素
  3. class Flyweight{
  4. constructor(){
  5. this.created = [];
  6. }
  7. createdEle(){
  8. let dom = document.createElement('div');
  9. document.getElementById('xxx').appendChild(dom);
  10. create.push(dom)
  11. return dom
  12. }
  13. getEle(){
  14. if(this.created.length < 5){
  15. return this.createdEle()
  16. }else{
  17. let div = this.created.shift();
  18. created.push(div);
  19. return div;
  20. }
  21. }
  22. }
  23. function onLoadPage(page){
  24. let flyweight = new Flyweight();
  25. let pageData = ajax.$get({
  26. page,
  27. size:10
  28. })
  29. for( let i=0; i<pageData.length; i++ ){
  30. flyweight.getEle().innerHTML = pageData[i] //设置数据内容
  31. }
  32. }
  33. let page = 0;
  34. function nextPage(){
  35. onLoadPage(page++)
  36. }

总结

优点

  • 大大减少对象的创建、降低系统的内存

    缺点

  • 增加复杂度、一个类拆成多个类