[デザインモード] - 複合モードコンポジット

  はじめに:[ モードの概要 ] ---------- xingooによって

  意思モード

  ツリー構造にオブジェクトだから。一貫性は、ユーザがオブジェクトと個々のオブジェクトの組み合わせを使用することを可能にします。

  

  シナリオ

  図1オブジェクトの一部 - 全体階層

  2の異なる組み合わせは、オブジェクトと個々のオブジェクト、一貫性のある組み合わせ構造内のすべてのオブジェクトを無視します。

  モード構造

  [セキュリティ]コンビネーションモード

  すなわち、制御対象この複合モード、リーフノードは、単一のオブジェクトを有していません。単純な事業活動があります。

 1 package com.xingoo.composite.safe;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 interface Component{
 7     Composite getCmposite();
 8     void sampleComposite();
 9 }
10 
11 class Leaf implements Component{
12 
13     public Composite getCmposite() {
14         return null;
15     }
16 
17     public void sampleComposite() {
18         System.out.println("Leaf operation");
19     }
20     
21 }
22 
23 class Composite implements Component{
24 
25     private List<Component> list = new ArrayList();
26     
27     public void add(Component component){
28         list.add(component);
29     }
30     
31     public void remove(Component component){
32         list.remove(component);
33     }
34     
35     public Composite getCmposite() {
36         return this;
37     }
38 
39     public void sampleComposite() {
40         System.out.println("Composite operation");
41         for(Component com : list){
42             com.sampleComposite();
43         }
44     }
45     
46 }
47 public class Client {
48     public static void main(String[] args) {
49         Component leaf1 = new Leaf();
50         Component leaf2 = new Leaf();
51         Component composite = new Composite();
52         composite.getCmposite().add(leaf1);
53         composite.getCmposite().add(leaf2);
54         composite.getCmposite().sampleComposite();
55     }
56 }

  結果

Composite operation
Leaf operation
Leaf operation

 

  [透明]組合せパターン

  リーフノードオブジェクトと組み合わされ、この組み合わせモデルは、同じ方法を有する、外観に差異はありません。しかし、リーフノードの治療は、デフォルトでは空です。オブジェクトのリーフノード、多様性との組み合わせを無視します。

 1 package com.xingoo.composite.transparent;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 interface Component{
 7     public void SampleOperation();
 8     public void add(Component component);
 9     public void remove(Component component);
10     public Component getComponent();
11 }
12 
13 class Leaf implements Component{
14     public void SampleOperation() {
15         System.out.println("leaf operation!");
16     }
17 
18     public void add(Component component) {
19         
20     }
21 
22     public void remove(Component component) {
23         
24     }
25     
26     public Component getComponent(){
27         return this;
28     }
29 }
30 
31 class Composite implements Component{
32     
33     private List<Component> list = new ArrayList();
34     
35     public void SampleOperation() {
36         System.out.println("composite operation!");
37         for(Component com : list){
38             com.getComponent().SampleOperation();
39         }
40     }
41 
42     public void add(Component component) {
43         list.add(component);
44     }
45 
46     public void remove(Component component) {
47         list.remove(component);
48     }
49     
50     public Component getComponent(){
51         return this;
52     }
53 }
54 public class Client {
55     public static void main(String[] args) {
56         Component leaf1 = new Leaf();
57         Component leaf2 = new Leaf();
58         Component leaf3 = new Leaf();
59         Component composite1 = new Composite();
60         Component composite = new Composite();
61         
62         composite1.add(leaf3);
63         
64         composite.getComponent().add(leaf1);
65         composite.getComponent().add(leaf2);
66         composite.getComponent().add(composite1);
67         
68         composite.getComponent().SampleOperation();
69     }
70 }

  本実施形態の階層構造

  結果

composite operation!
leaf operation!
leaf operation!
composite operation!
leaf operation!

 

ます。https://my.oschina.net/u/204616/blog/545218で再現

おすすめ

転載: blog.csdn.net/weixin_34072857/article/details/91989360