概要
これは、「部分的な」階層を表すためにツリー構造内のオブジェクトを整理する構造パターンであり、個々のオブジェクトと組み合わせオブジェクトの使用においてクライアントをユニークにします。
UMLクラス図
上記のクラス図には、役割が含まれています。
コンポーネント:組み合わせであろうとリーフノードであろうと、構成に参加するオブジェクトの共通インターフェイスを宣言します。
リーフ:組み合わせのリーフノードオブジェクトを表し、リーフノードには子ノードがありません。
Composite:オブジェクトは、組み合わせに参加する子オブジェクトを持つオブジェクトを表し、支店構造の動作を提供します。
コードの例
Import java.util.arraylist; Import Java.util.list; Abstract class Component {protected string name; public Component(string name){this.name = name; } public Abstract void add(コンポーネントC);パブリックアブストラクトvoid remove(コンポーネントC);パブリックアブストラクトvoid getChild(int depth);} class Leafはコンポーネントを拡張します{public Leaf(string name){super(name); } @Override public void add(component c){system.out.println( "leafに追加できません"); } @Override public void remove(component c){system.out.println( "葉から削除できない"); } @Override public void getChild(int dept){string temp = ""; for(int i = 0; i <depth; i ++){temp+= " - "; System.out.println(temp + name); }}} class Composite拡張コンポーネント{private list <component> children = new arrayList <>(); public composite(string name){super(name); } @Override public void add(component c){children.add(c); } @Override public void remove(component c){children.remove(c); } @Override public void getChild(int depth){for(component c:children){c.getChild(deption); }}} public class main {public static void main(string args []){composite root = new Composite( "root"); root.add(new Leaf( "Leaf a")); root.add(new Leaf( "Leaf B")); composite compx = new Composite( "Composite x"); compx.add(new Leaf( "Leaf xa")); compx.add(new Leaf( "Leaf xb")); root.add(compx); composite compxy = new Composite( "Composite xy"); compxy.add(new Leaf( "Leaf xya")); compxy.add(new Leaf( "Leaf xyb")); compx.add(compxy); root.getChild(3); }}アプリケーションシナリオ
1.オブジェクトの部分からすべての階層を必要とします。
2.クライアントが、クライアントが複合オブジェクトと単一のオブジェクトの違いを無視することを望んでいる場合、クライアントは複合構造内のすべてのオブジェクトを均一に使用します。
コンビネーションパターンは、葉のオブジェクトと複合オブジェクトで構成されるクラス構造を定義します。
クライアントをシンプルにします。
サブパートを簡単に追加または削除できます。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。