首頁  >  文章  >  web前端  >  簡單介紹js設計模式之結構型享元模式

簡單介紹js設計模式之結構型享元模式

巴扎黑
巴扎黑原創
2017-09-02 13:41:351383瀏覽

這篇文章主要為大家詳細介紹了js設計模式之結構型享元模式的相關資料,具有一定的參考價值,有興趣的小伙伴們可以參考一下

運用共享技術有效地支援大量的細粒度的對象,避免對象間擁有相同內容造成多餘的開銷。
享元模式主要是對其資料、方法共享分離,將資料和方法分成內部資料、內部方法和外部資料、外部方法。內部方法與內部資料指的是相似或共有的資料和方法,所以將其提取出來以減少開銷。


var Flyweight = function() {
 // 已创建的元素
 var created = [];
 // 创建一个新闻包装容器
 function create() {
  var dom = document.createElement('p');
  // 将容器插入新闻列表容器中
  document.getElementById('container').appendChild(dom);
  // 缓存新创建的元素
  created.push(dom);
  // 返回创建的新元素
  return dom;
 }
 return {
  // 获取创建新闻元素方法
  getp: function() {
   // 如果已创建的元素小于当前页元素总个数(5个),则创建
   if(created.length < 5) {
    return created();
   } else {
    // 获取第一个元素,并插入去后面
    var p = created.shift();
    created.push(p);
    return p;
   }
  }
 }
}

上面建立一個享元類,由於每頁只能顯示5條新聞,所以創建5個元素,保存在享元類內部,可以透過getp方法來取得已建立的元素。下面就要實現外部資料和外部方法,外部資料就是我們要顯示的所有新聞內容,由於每個內容都不一樣肯定不能共享。


var paper = 0,
  num = 5,
  len = article.length;
// 添加五条新闻
for(var i = 0; i < 5; i++) {
 if(article[i])
 // 通过享元类获取创建的元素并写入新闻内容
 Flyweight.getp().innerHTML = article[i];
}


// 下一页按钮绑定事件
document.getElementById(&#39;next_page&#39;).onclick = function() {
 // 如果新闻内容不足5条则返回
 if(article.length < 5) {
  return;
 }
 var n = ++paper * num % len, // 获取当前页的第一条新闻索引
   j = 0;
 // 插入5条新闻
 for(; j < 5; j++) {
  // 如果存在n+j条则插入
  if(article[n + j]) {
   Flyweight.getp().innerHTML = article[n + j];
  // 否则插入起始位置第n+j-len条
  } else if(article[n + j - len]) {
   Flyweight.getp().innerHTML = article[n + j - len];
  } else {
   Flyweight.getp().innerHTML = "";
  }
 }
}


#這樣用享元模式對頁面重構之後每次操作只需要操作5個元素,這樣性能可以提高很多。
享元模式的應用是為了提高程式的執行效率與系統效能,因此在大型系統開發中應用比較廣泛,可以避免程式中的資料重複。應用時一定要找準內部狀態與外部狀態,這樣才能更合理地提取分離。

以上是簡單介紹js設計模式之結構型享元模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn