javascriptデザインモード学習ノートの組み合わせモード
1761 ワード
コンビネーションモード合成モードは、オブジェクトをツリー構造に結合し、「部分−全体」を表す階層構造であり、さらに、オブジェクトの多状態性を利用して、合成オブジェクトと単一のオブジェクトを一括して扱う である.注意点: グループモードは親子関係ではありません. のリーフオブジェクト動作の一貫性 双方向マッピング関係 .職責チェーンパターンを利用して、合成モード性能を向上させる .
アプリケーションシーン は、オブジェクトの部分を表しています.全体的な階層構造 お客様はツリー内のすべてのオブジェクトに対して統一したいです.
例:スキャンフォルダ
/* * * * * * (Folder) * * * * * * */
var Folder = function(name) {
this.name = name;
this.files = [];
this.parent = null;
}
Folder.prototype.add = function(file) {
file.parent = this;
this.files.push(file);
}
Folder.prototype.scan = function() {
console.log(' :' + this.name);
var i = 0,
len = this.files.length,
file;
for(; i < len; i++) {
file = this.files[i];
file.scan();
}
}
Folder.prototype.remove = function() {
if (!this.parent) {
return;
}
var i = this.parent.files.length - 1,
files = this.parent.files,
file;
for(; i >= 0; i--) {
file = files[i];
if (file === this) {
files.splice(i, 1);
}
}
}
/* * * * * * (File) * * * * * * */
var File = function(name) {
this.name = name;
this.parent = null;
}
File.prototype.add = function() {
throw new Error(' ');
}
File.prototype.scan = function() {
console.log(' :' + this.name);
}
File.prototype.remove = function() {
if (!this.parent) {
return;
}
var i = this.parent.files.length - 1,
files = this.parent.files,
file;
for(; i >= 0; i--) {
file = files[i];
if (file === this) {
files.splice(i, 1);
}
}
}