【设计模式】—— 组合模式Composite

简介:

  模式意图

  使对象组合成树形的结构。使用户对单个对象和组合对象的使用具有一致性。

  

  应用场景

  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!

 

本文转自博客园xingoo的博客,原文链接:【设计模式】—— 组合模式Composite,如需转载请自行联系原博主。
相关文章
|
4月前
|
设计模式
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
二十三种设计模式全面解析-组合模式与迭代器模式的结合应用:构建灵活可扩展的对象结构
|
4天前
|
设计模式 Java 容器
【设计模式系列笔记】组合模式
组合模式(Composite Pattern)是一种结构型设计模式,它允许将对象组合成树状结构以表示部分-整体的层次结构。组合模式使得客户端可以统一处理单个对象和对象组合,而无需区分它们的类型。
36 12
|
13天前
|
设计模式 Java
小谈设计模式(20)—组合模式
小谈设计模式(20)—组合模式
|
1月前
|
设计模式 JavaScript uml
设计模式之组合模式
设计模式之组合模式
设计模式之组合模式
|
1月前
|
设计模式 存储 安全
【设计模式】组合模式
【设计模式】组合模式
|
2月前
|
设计模式 Java
浅谈设计模式 - 组合模式(十二)
浅谈设计模式 - 组合模式(十二)
51 0
|
3月前
|
设计模式 存储 安全
聊聊Java设计模式-组合模式
组合(Composite)模式,又叫做树形模式,主要用来处理树形结构数据。是将一组对象组织成树形结构,以表示一种“部分-整体”的层次结构。让客户端可以统一单个对象和组合对象的处理逻辑
29 1
聊聊Java设计模式-组合模式
|
3月前
|
设计模式 存储
设计模式 | 组合模式
设计模式 | 组合模式
12 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——17组合模式
Golang设计模式——17组合模式
13 1
|
3月前
|
设计模式 存储 前端开发
【设计模式】之组合模式
组合模式是一种非常有用的设计模式,在前端开发中经常用于处理复杂的层次结构和嵌套关系。它通过将对象组合成树形结构来表示“部分-整体”的关系,并提供了一种优雅而灵活的方式来处理复杂性。通过使用组合模式,我们可以构建可扩展和易于维护的应用程序。然而,需要根据具体情况权衡使用组合模式所带来的优缺点。
39 0