JavaScript設計模式-- 迭代器(Iterator)模式
定義: 提供一個可簡單操作的介面, 用以不用暴露資料來源方法去更動資料。使用者能透過操作介面對資料做更動(但又能保護原始資料不被修改到)。
e.g.
var egg = (function() {
var index = 0;
var data = [1, 2, 3, 4, 5]; // 外部無法修改data
var length = data.length;
return {
next: function() {
var element;
if (!this.hasNext()) { // 防呆設計
return null;
}
element = data[index];
index = index + 1;
return element;
},
hasNext: function() {
return index < length; // 回傳Boolean
},
rewind: function() { // 歸零動作
index = 0;
},
current: function() {
return data[index];
}
};
})();
egg.rewind();
while(egg.hasNext()) {
console.log(egg.current()); // 1 2 3 4 5
egg.next();
}
// 如果未來想新增資料,
只需在var data = [1, 2, 3, 4, 5]; 改為 var data = [1, 2, 3, 4, 5, 6, 7, 8, 9];
這樣 console.log(egg.current()); // 1, 2, 3, 4, 5, 6, 7, 8, 9
e.g.
var egg = (function() {
var index = 0;
var data = [1, 2, 3, 4, 5]; // 外部無法修改data
var length = data.length;
return {
next: function() {
var element;
if (!this.hasNext()) { // 防呆設計
return null;
}
element = data[index];
index = index + 1;
return element;
},
hasNext: function() {
return index < length; // 回傳Boolean
},
rewind: function() { // 歸零動作
index = 0;
},
current: function() {
return data[index];
}
};
})();
egg.rewind();
while(egg.hasNext()) {
console.log(egg.current()); // 1 2 3 4 5
egg.next();
}
// 如果未來想新增資料,
只需在var data = [1, 2, 3, 4, 5]; 改為 var data = [1, 2, 3, 4, 5, 6, 7, 8, 9];
這樣 console.log(egg.current()); // 1, 2, 3, 4, 5, 6, 7, 8, 9
留言
張貼留言