複合モード
階層- 「全体の一部」を表現するためにツリー構造でオブジェクトを組み合わせます。複合材料は、そのような一貫性を有する単一ユーザーオブジェクトとオブジェクトの組み合わせが挙げられます。
Compositeパターン
partwhole階層を表現するために、ツリー構造にオブジェクトを構成します。コンポジットは、クライアントが均一に個々のオブジェクトとオブジェクトの組成物を扱うことができます。
I.概要
複合モードは、オブジェクトが、全体的な成熟度モデルと階層部分を表現するために、ツリー構造を形成する方法についてです。モードの組み合わせを使用して、全て同じインターフェースまたは抽象クラスを実装するオブジェクトの個々のオブジェクトまたは組み合わせか否かを組み合わせモードで一貫した方法で可能にするユーザ個々のオブジェクトとオブジェクトの組み合わせ、キー嘘は、同じサブクラスです。
第二に、構造とモードの組み合わせ
構造モデルは、3つの役割が含まれます。
•抽象コンポーネント(成分)
複合ノード(ノードコンポジット)•
•リーフノード(リーフノード)
UMLのクラス図
実現
1。抽象コンポーネント(成分):MilitaryPerson.java
輸入 java.utilの。* ; パブリック インターフェイスMilitaryPerson { 公共 ボイド追加(MilitaryPerson人)。 公共 ボイド削除(MilitaryPerson人)。 公共 MilitaryPersonでGetChild(int型のインデックス); 公共イテレータ<MilitaryPerson> getAllChildren(); パブリック ブールのisLeaf(); 公共 ダブルgetSalary(); 公共 ボイド setSalary(ダブル給料)。 }
2。コンポジット节点(コンポジットノード):MilitaryOfficer.java
輸入 java.utilの。* ; パブリック クラス MilitaryOfficerは実装MilitaryPerson { のLinkedList <MilitaryPerson> リストを。 文字列の名前。 ダブル給与; MilitaryOfficer(文字列名、ダブル給料){ この .nameの= 名前。 この .salary = 給与; リスト = 新しい LinkedListは<MilitaryPerson> (); } 公共 ボイド追加(MilitaryPerson者){ list.add(人)。 } 公共 ボイド削除(MilitaryPerson者){ list.remove(人)。 } 公共 MilitaryPersonでGetChild(int型のインデックス){ 戻りlist.get(インデックス)。 } 公共イテレータ<MilitaryPerson> getAllChildren(){ 戻りlist.iterator()。 } パブリック ブールのisLeaf(){ 戻り 偽。 } 公共 ダブルgetSalary(){ 戻り給与。 } 公共 ボイド setSalary(ダブル給料){ この .salary = 給与。 } }
3。葉ノード(リーフノード)MilitarySoldier.java
輸入 java.utilの。* ; パブリック クラス MilitarySoldierは実装MilitaryPerson { ダブル給料を。 文字列の名前。 MilitarySoldier(文字列名、ダブル給料){ この .nameの= 名前。 この .salary = 給与; } 公共 ボイド追加(MilitaryPerson者){} 公共 ボイド削除(MilitaryPerson者){} 公共 MilitaryPersonでGetChild(int型のインデックス){ 戻り ヌル。 } パブリック反復子<MilitaryPerson> getAllChildren(){ 戻り ヌル。 } パブリック ブールのisLeaf(){ 戻り 真。 } 公共 ダブルgetSalary(){ 戻り給与。 } 公共 ボイド setSalary(ダブル給料){ この .salary = 給与。 } }
4。アプリケーション_1:ComputerSalary.java
輸入 java.utilの。* ; パブリック クラスComputerSalary { パブリック 静的 ダブルcomputerSalary(MilitaryPerson者){ 二重和= 0 。 もし(person.isLeaf()== 真){ 合計 =合計+ person.getSalary()。 } であれば(person.isLeaf()== 偽){ 合計 =合計+ person.getSalary()。 反復子 <MilitaryPerson>イテレータ= person.getAllChildren()。 一方、(iterator.hasNext()){ MilitaryPerson P = iterator.next()。 和=和+ computerSalary(P);; } } 戻り値の和。 } }