定義
合成モードがより大きいオブジェクトを作成するために、小さな子オブジェクトを使用することで、これらの小サブオブジェクト自体が小さく、「サン・オブジェクト」で構成されてもよい構成される。
7.1の組み合わせの例 - スキャンフォルダ
//文件夹类
function Folder(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);
for (let i=0; i<this.files.length; i++) {
const file = this.files[i];
file.scan();
}
}
Folder.prototype.remove = function(file) {
if (!this.parent) {
return false;
}
const files = this.files;
const len = files.length;
for (let i=files[len]; i >= 0; i--) {
if (files[i] === file) {
files.splice(i,1);
}
}
}
// 文件类
function File(name) {
this.name = name;
this.parent = null;
}
File.prototype.add = function() {
throw new Error('file下面不能添加文件');
}
File.prototype.scan = function() {
console.log('开始扫描文件 => ',this.name);
}
File.prototype.remove = function() {
if (!this.parent) {
return false;
}
const files = this.files;
const len = files.length;
for (let i=files[len-1]; i >= 0; i--) {
if (files[i] === file) {
files.splice(i,1);
}
}
}
const Ftimo = new Folder('Ftimo');
const Ffe = new Folder('Ffe');
const Fjs = new Folder('Fjs');
const Fes6 = new Folder('Fes6');
const Freact = new Folder('Freact');
const Fredux = new Folder('Fredux');
const findex = new File('findex');
const fcss = new File('fcss');
const fless = new File('fless');
const fjavascript = new File('fjavascript');
const fjava = new File('fjava');
Ftimo.add(Ffe);
Ffe.add(Fjs);
Ffe.add(Fes6);
Fjs.add(findex);
Fjs.add(fcss);
Fjs.add(fless);
Ffe.add(fjavascript);
Ffe.add(fjava);
Fjs.add(Freact);
Fjs.add(Fredux);
Ftimo.scan();
复制代码
7.2最適化されたコード
复制代码
7.3 注意点
- 複合モードは、父と息子の関係ではなく、親子関係
- 一貫性のリーフオブジェクトの操作
- 間の双方向マッピング
- 組み合わせパターンデューティチェーンのパフォーマンスを改善します。
任意のパターン7.4と組み合わせて使用する場合
- 階層全体のセクションを表すオブジェクト。合わせたモードを容易にオブジェクト全体の一部を表すためにツリー構造を構築することができます。最終的にはツリーレベルは、開発中に存在するどのように多くの時に特に、我々は確認されていません。木の最終的な構造、木でわずか最上位のオブジェクト要求が完了した後、私たちはツリー全体の動作を統一することができるようになります。
- お客様は、ツリー内のすべてのオブジェクトの統一された治療をしたいです。Combinationモードでは、else文がある場合の束を書き込みません、オブジェクトのリーフオブジェクトまたはそれらの組み合わせである、現在処理されているオブジェクトを気にしない、オブジェクトとリーフオブジェクトの組み合わせは、ツリーの顔に顧客を無視することができます区別するために顧客を可能にしますそれらを扱います。グループオブジェクトとリーフオブジェクトは、各組み合わせのモデルが最も重要な機能であるである自分のことの権利を、行います。
7.5概要
- 複合モードは、我々の方法のツリー構造の使用は、オブジェクトを作成することができます。私たちは、オブジェクトと単一のオブジェクトの組み合わせに同じ操作を適用することができます。ほとんどの場合、我々は一貫した方法でそれらを処理するので、オブジェクトや個々のオブジェクトの組み合わせの違いを無視することができます。
- あまりにも多くのオブジェクトがパターンを組み合わせて作成した場合、これらのオブジェクトは、システムが余裕がないことがあります。
ます。https://juejin.im/post/5d03a4c0518825092c716ecdで再現