最初の印象
そこの関係の多くの不可欠な部分があり、これは方法の開発で最大のツリーに反映されています。複合モードは、より良い、このようなビジネスシナリオの問題を解決することです。コンバインモードの定義を見てください:
の階層関係「不可欠な部分を」 -表すためにツリー構造でオブジェクトを組み合わせます。合成モードは、オブジェクトとオブジェクトの単一の一貫した組み合わせを使用することを可能にします。それは、2つの主要な組成物が第2のモードがある定義から分かります。
1、全体 - ツリー構造によって表されるビジネスの一部の間です。
図2に示すように、均一の物体と個々のオブジェクトの組み合わせを使用しているので。
こうした中国の国家管理レベル、地方*** **市など全体的な構造や生活の中であまりにも広義の一部。学校の管理レベル、コーポレート・ガバナンス及びその他の組織は、以下の組織の会社に、例えば、コンビネーションモデルを見てみましょう。
プロの用語を導入する企業の組織構造は、構造の楽しさに追加するこの写真によると:ルートルートと呼ば部長、財務管理、技術管理者は、開発ブランチノード(分岐)、財務長官の頭を、秘書が呼ばれると呼ばれますリーフノード(葉)。
そしてコード・レベルに特有は、達成され、コアは、これらの3つの主要なモデルオブジェクトの組み合わせは、プロセスの構成要素に関係なく、同じインタフェースを実装するか、または同じインターフェイスを持つすべてのノードをトラバースした後で、ツリー構造のよう操作がより便利に。
次に、構成要素は、複合モードに記載します
- 成分:成分の組み合わせ、異なるインターフェイスの均一な根、枝、葉ノードを提供するためです。
- コンポジット:コンポジットノードはルート、ブランチノードとも呼ばれるコンテナノードを実現することです。
- 葉:葉ノードは、下位のノードを持つことはできません。また、シンプルなノードと呼ばれます。
アプリケーション例
次に、我々は、上記の例次の図を実装し、より直感的な理解を組み合わせモードすることができ
// 相当于是コンポーネント のパブリック 抽象 クラス Zhiwei { 保護された文字列の名前。 保護された文字列の位置。 保護された フロート給与; 公共 Zhiwei(文字列名、文字列の位置、フロート給料){ この .nameの= 名前。 この .position = 位置。 この .salary = 給与; } パブリック 抽象 ボイドはaddChild(Zhiwei zhiwei)。 パブリック 抽象 ボイドのremoveChild(Zhiwei zhiwei)。 パブリック 抽象 ボイドディスプレイ(文字列は空)。 } // 相当于是複合 パブリック クラス LingDaoが延びZhiwei { プライベートのArrayList <Zhiwei>子供= 新規のArrayList <Zhiweiを> (); 公共 LingDao(文字列名、文字列の位置、フロート給与){ スーパー(名前、位置、給与); } @Override 公共 ボイドはaddChild(Zhiwei zhiwei){ // TODO自動生成方法スタブ children.add(zhiwei)。 } @Override 公共 のボイドremoveChild(Zhiwei zhiwei){ // TODO自動生成方法スタブ children.remove(zhiwei)。 } @Override 公共 ボイドディスプレイ(文字列空の){ // TODO自動生成方法スタブ のSystem.out.println(空+ "职位:" + この .position + "姓名: "+ この .nameの+"薪水:" + この.salary ); 用(Zhiweiのzhiwei:子供){ zhiwei.display(空 +」 " ); } } } // 普通职员 パブリック クラスの葉が拡張Zhiwei { 公共リーフ(文字列名、文字列の位置、フロート給与){ スーパー(名前、位置、給与); // TODO自動生成コンストラクタスタブ } @Override 公共 ボイドはaddChild(Zhiwei zhiwei){ // TODO自動生成方法スタブ のSystem.out.println(「リーフにzhiweiを追加することはできません」)。 } @Override 公共 ボイドのremoveChild(Zhiwei zhiwei){ // TODO自動生成方法スタブ } @Override 公共 ボイドディスプレイ(文字列空の){ // TODO自動生成されたスタブ方法、 のSystem.out.println(空+ "位置:" + this.position + "名:" + this.name + "給与:" + this.salary); } } // クライアント のパブリック クラスのクライアント{ 公共 静的 ボイドメイン(文字列[]引数){ Zhiweiリーダー = 新しい新 LingDao( "張無忌"、 "一般的なマネージャー"、100000 ); Zhiweiマネージャ = 新しい新 LingDao( "ヤンシャオ"、 "テクノロジー・マネージャ"、50000 ); Zhiwei managerB = 新しい新 LingDao( "ファン八尾"、 "財務管理"、50000 ); ManagerC Zhiwei = 新新 leader.addChild(従業員) manager.addChild(managerC)。 manager.addChild(EmployeeC); managerC.addChild(employeed); leader.display( "" ); } } / ** **************************************************コンソール********** ************* * / -位置:ゼネラルマネージャー名:張無忌給与:100,000.0 -位置:テクニカルマネージャー名:ヤンシャオ給与:50000.0 -位置:技術的なリーダー名:呉スーパーグラスの給与: 20000.0 -位置:開発B位置:レイマイターゲート給与:8400.0 -位置:開発名:風マイターゲート給与:8800.0 -位置:財務マネージャー名:ファン八尾給与:50000.0 -位置:風マイターゲート給与:名の資金を調達:5000.0 -位置:金融B名:単語ドア給与:5200.0 -位置:秘書名:UNIT給与:8000.0
あなたは、クライアントの裁判上の同じインターフェイスを介してノードの異なるレベルのうち、この例で見ることができる非常に便利である、ノード何に代わって時間を呼び出すために彼を必要としません。同じことが試すことができますので。唯一のリーフレベルのノードには、removeChildの、はaddChildを検討し、エラープロンプトを与えます。
モデルの解析
我々はさらに、アプリケーションシナリオの組み合わせモードを分析明らか事業とのツリーに加えて、我々の能力に劇中の発散が、期待することができるはずすべて使用することができ、親子関係限りシーンを、そのようなフォームを開くと父と息子の窓、組織構造やシステム、ナビゲーションツリー構造の文書管理システム、ソフトウェアシステムの各部の担当者。
長所を組み合わせたモードを考慮すると、アプリケーションシナリオの複合モードのための思考の後:
図1に示すように、物体の挙動がより一貫性、オブジェクトの異なるレベルを達成するために、均一なインタフェースを定義します。クライアントの呼び出しを作ることは比較的簡単です。
2は、クラス所属クラスリストによって達成された全体のビジネスシーンのレベルを達成することができます。
3は、より一般的なクラス、よりスケーラブルなコードを達成するために。新しく定義されたコンポジットと葉が統一されたユーザー・インターフェースを継承し、主に、クライアントが変更されないでしょう。
概要
複合モードのシナリオは、親子構造を有するシナリオである典型的なツリー構造です。エッセンスは、ノード・オブジェクト・インタフェースの異なるレベルの統一モデルを導入することで、異なるレベルを呼び出すために、オブジェクトは、操作の一貫性を有しています。