Java設計モード-組合せモード



コンビネーションモードは一般的な設計モード(しかし、私は少し複雑な感じがします)であり、合成モードとも呼ばれ、部分-全体モードとも呼ばれ、主に部分と全体の関係を説明するために使用されます.
 
コンビネーションモードは、部分を全体に組み立てることです.
 
次のように定義します.
オブジェクトをツリー構造に結合して「部分-全体」の階層を表し、ユーザーが単一のオブジェクトと組合せオブジェクトの使用に一貫性を持つようにします.
 
共通クラス図は次のとおりです.
 
コンビネーション・モードに含まれるロール:
●Component抽象コンポーネントロールは、グループ化されたオブジェクトに参加する共有メソッドと属性を定義し、いくつかのデフォルトの動作または属性を定義することができる.
・Leaf葉部材葉オブジェクトは、その下に他の枝、すなわち遍歴の最小単位がない.・木の枝のノードと葉のノードを組み合わせて木の構造を形成する役割を果たすComposite木の枝のコンポーネント木のオブジェクト.
 
汎用ソース:
    
public abstract class Component {
     //           
     public void do Something(){
             //      
     }
}

 
    
public class Composite extends Component {
     //    
     private Array List<Component> component Array List = new Array List<Component>()
     //             
     public void add(Component component){
             this.component Array List.add(component);
     }
     //             
     public void remove(Component component){
             this.component Array List.remove(component);
     }    
 //                 
     public Array List<Component> get Children(){
             return this.component Array List;
     }
}

リーフノードは、子の下位オブジェクトがないオブジェクトであり、グループに参加する元のオブジェクトの動作を定義します.
    
public class Leaf extends Component {
     /*
      * 
        
      * public void do Something(){
      * 
      * }
      */
}

 
テストクラスは、ツリー構造の構築を担当し、ツリー全体を再帰的に巡回できます.
public class Client {
     public static void main(String[] args) {
            //       
             Composite root = new Composite();
             root.do Something();
             //        
             Composite branch = new Composite();
             //        
             Leaf leaf = new Leaf();
             //    
             root.add(branch);
             branch.add(leaf);          
     }
     //       
     public static void display(Composite root){
             for(Component c:root.get Children()){
                  if(c instanceof Leaf){ //    
                          c.do Something();
                  }else{ //    
                          display((Composite)c);
                  }
             }
     }
}

コンビネーションモードの利点:
●高レベルモジュール呼び出し単純な1本の木の中のすべてのノードはComponentであり、ローカルと全体は呼び出し者にとって何の違いもない.つまり、高レベルモジュールは自分が処理したオブジェクトが単一なのか、または組合せ構造全体なのかに関心を持つ必要がなく、高レベルモジュールのコードを簡略化する.●ノードの自由増加コンビネーションモードを使用した後、枝ノード、木の葉ノードを1つ追加するのは容易ではないか、親ノードを見つけるだけで、非常に拡張しやすく、開閉の原則に合致し、今後のメンテナンスに非常に有利であることを見ることができます.
コンビネーションモードの欠点:
コンビネーションモードには非常に明らかな欠点があり、シーンクラスでの定義を見て、木の葉と枝の使用時の定義に言及しましたか?実装クラスを直接使用しました!これはインタフェース向けのプログラミングでは不適切で、依存逆置きの原則と衝突しており、読者が使用するときは、インタフェースの影響範囲を制限していることをよく考えなければなりません.
シーンの使用:●ツリーメニュー、ファイル、フォルダ管理など、部分の維持と表示-全体的な関係のシーン.・モジュールや機能の一部を1つの全体から独立して取り出すことができるシーン.
注意事項:
木の構造であれば、組み合わせパターンを使うことを考えなければなりません.これは必ず覚えておいてください.局所と全体の関係を体現するときであれば、この関係はまだ深いかもしれません.組み合わせパターンを考えてみましょう.