1. 程式人生 > >js設計模式(六)---組合模式

js設計模式(六)---組合模式

結構 性能 文件 樹形結構 add err 添加 scan ice

  組合模式將對象組合成樹形結構,以表示“部分-整體”的層次結構。除了用來表示樹形結構之外,組合模式的另一個好處是通過對象的多態性表現,使得用戶對單個對象和組合對象的使用具有一致性。基本圖例

技術分享圖片

1、組合模式不是父子關系,

2、組合模式對葉對象的操作一致

3、雙向映射關系。

4、可以用職責鏈模式提高組合模式的性能

//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;   }   for ( var files = this.parent.files, l = files.length - 1; l >=0; l-- ){     var file = files[ l ];     if ( file === this ){       files.splice( l, 1 );     }   } };

var folder = new Folder( ‘學習資料‘ );
var folder1 = new Folder( ‘JavaScript‘ );
var file1 = new Folder ( ‘深入淺出 Node.js‘ );


folder1.add( new File( ‘JavaScript 設計模式與開發實踐‘ ) );
folder.add( folder1 );
folder.add( file1 );
folder1.remove(); //移除文件夾
folder.scan();

組合模式使用場景:

1、表示對象的 “部分-整體“層次的結構

2、客戶希望統一對待樹中的所有對象

js設計模式(六)---組合模式