`

结构型模式--组合模式(Composite)

阅读更多

组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图:

Java组合模式

对象通过实现(继承)统一的接口(抽象类),调用者对单一对象和组合对象的操作具有一致性

直接来看代码:

[java] view plaincopy
  1. public class TreeNode {  
  2.       
  3.     private String name;  
  4.     private TreeNode parent;  
  5.     private Vector<TreeNode> children = new Vector<TreeNode>();  
  6.       
  7.     public TreeNode(String name){  
  8.         this.name = name;  
  9.     }  
  10.   
  11.     public String getName() {  
  12.         return name;  
  13.     }  
  14.   
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.   
  19.     public TreeNode getParent() {  
  20.         return parent;  
  21.     }  
  22.   
  23.     public void setParent(TreeNode parent) {  
  24.         this.parent = parent;  
  25.     }  
  26.       
  27.     //添加孩子节点  
  28.     public void add(TreeNode node){  
  29.         children.add(node);  
  30.     }  
  31.       
  32.     //删除孩子节点  
  33.     public void remove(TreeNode node){  
  34.         children.remove(node);  
  35.     }  
  36.       
  37.     //取得孩子节点  
  38.     public Enumeration<TreeNode> getChildren(){  
  39.         return children.elements();  
  40.     }  
  41. }  
[java] view plaincopy
  1. public class Tree {  
  2.   
  3.     TreeNode root = null;  
  4.   
  5.     public Tree(String name) {  
  6.         root = new TreeNode(name);  
  7.     }  
  8.   
  9.     public static void main(String[] args) {  
  10.         Tree tree = new Tree("A");  
  11.         TreeNode nodeB = new TreeNode("B");  
  12.         TreeNode nodeC = new TreeNode("C");  
  13.           
  14.         nodeB.add(nodeC);  
  15.         tree.root.add(nodeB);  
  16.         System.out.println("build the tree finished!");  
  17.     }  
  18. }  

使用场景:将多个对象组合在一起进行操作,常用于表示树形结构中,例如二叉树,数等。

 

2=====================================================

interface Node{  
    public void copy(); //定义统一的接口:复制  
}  
 
class Folder implements Node{  
    private String folderName;  
    private ArrayList nodeList =new ArrayList(); //用于存储文件夹下的文件夹或文件的信息 
 
    public Folder(String folderName){  
        this.folderName = folderName;  
    }  
 
    public void add(Node node){ //增加文件或文件夹  
        nodeList.add(node);  
    }  
 
    public void copy(){  //文件夹复制操作实现递归  
        System.out.println("复制文件夹:" + folderName);  
        for(int i=0;i
            Node node = (Node)nodeList.get(i);  
            node.copy();  
        }  
    }  
}  
 
class File implements Node{  
    private String fileName;  
 
    public File(String fileName){  
        this.fileName = fileName;  
    }  
 
    public void copy(){  
        System.out.println("复制文件:" + fileName);  
    }  
}  
 
public class Composite{  
    public static void main(String[] args){  
        Folder document = new Folder("我的资料"); //我的资料文件夹  
        File book = new File("Java编程思想.pdf");  //文档文件  
        Folder music = new Folder("我的音乐");   //我的音乐文件夹  
        File music1 = new File("你是我的眼.mp3");   //音乐文件1  
        File music2 = new File("Without You.mp3");  //音乐文件2  
        //确定树形结构关系  
        document.add(book);  
        document.add(music);  
        music.add(music1);  
        music.add(music2);  
 
        document.copy(); //复制“我的资料”文件夹,递归地复制了其下所有文件夹和文件。 
    }  
} 

 运行结果如下:

  1. 复制文件夹:我的资料  
  2. 复制文件:Java编程思想.pdf  
  3. 复制文件夹:我的音乐  
  4. 复制文件:你是我的眼.mp3  
  5. 复制文件:Without You.mp3 
分享到:
评论

相关推荐

    c++设计模式-结构型模式-组合模式

    c++设计模式-结构型模式-组合模式;qt工程;c++简单源码; 组合(Composite Pattern)模式的定义:有时又叫作整体-部分(Part-Whole)模式,它是一种将对象组合成树状的层次结构的模式,用来表示“整体-部分”的关系...

    设计模式之组合模式(Composite Pattern)

    组合模式是一种行为设计模式,属于面向对象设计中的结构型模式,其主要目的是为了建立一种对象树形结构,这种结构能够使客户端代码以统一的方式处理单个对象和对象的组合。在组合模式中,我们通常会定义一个基类,...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式)

    标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,具体到第9篇讨论的是“Composite组合模式”。这一模式属于结构型模式的一种,旨在解决...

    组合模式-------树形模式

    组合模式,也称为树形模式,是一种结构型设计模式,它允许我们表示部分-整体层次结构,使得客户端代码可以统一地处理单个对象和对象集合。这种模式将对象组织成树形结构,允许用户对部分或整个树进行操作,简化了...

    c++-设计模式之组合模式(Composite Pattern)

    组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得客户端可以以统一的方式对待单个对象和组合对象,这种模式常用于需要处理树形结构的数据...

    设计模式面面观(11):组合模式(Composite Pattern)-结构型模式

    组合模式是软件工程中的一种结构型设计模式,它允许我们以树形结构来表示部分与整体的关系,使得客户端代码可以一致地处理单个对象和对象组合。在组合模式中,部分和整体通过统一的接口进行交互,这种“部分”和...

    设计模式专题之(九)组合模式---设计模式组合模式示例代码(python--c++)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们可以在统一的接口下处理单个对象和对象的组合。这个模式在处理类似目录树或者组织架构这样的数据时非常有用。在组合模式中,...

    java常用设计模式-组合模式

    组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构以表示“部分-整体”的层次结构。这种模式使得客户端可以统一对待单个对象和对象组合。在组合模式中,有两种基本类型的对象:叶...

    设计模式--组合模式java例子

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够像处理单个对象一样处理整个集合。在Java中,这种模式的应用可以帮助我们简化对复杂对象层次结构的操作,同时保持接口的...

    C#面向对象设计模式纵横谈(9):Composite 组合模式(结构型模式) (Level 300)

    组合模式是一种结构型设计模式,它允许我们创建部分-整体层次结构,使得部分与整体具有相同的行为。在C#中,这种模式可以帮助我们构建复杂的树形结构,使得客户端代码可以一致地处理单个对象和对象集合。让我们深入...

    C#面向对象设计模式纵横谈\9 结构型模式Composite组合模式.zip

    在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第9节:结构型模式Composite组合模式

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    组合模式(Composite Pattern)-结构型模式 (0%) &lt;br&gt;讲义书写模式 在实际的讲解中我会用一套模式来讲述我对设计模式的理解 1.给出当前章节模式的名称 2.讲述一个小故事,提出问题 3.回答这个...

    组合模式-五子棋代码.zip

    组合模式是一种对象结构型设计模式,它允许我们以树形结构来表示部分-整体关系,使得我们可以像处理单个对象一样处理整个集合。在五子棋游戏的实现中,组合模式的应用尤为关键,因为它帮助我们将棋盘上的棋子和棋盘...

    设计模式-组合实体

    在众多设计模式中,组合实体(Composite)模式是一种结构型模式,它允许我们以树形结构来表示部分与整体的关系,使得用户可以一致地处理单个对象和对象组合。在iOS开发中,组合实体模式尤其有用,因为它简化了复杂...

    [结构型模式] 组合模式的理解

    组合模式是一种结构型设计模式,它允许我们以统一的方式处理单个对象和对象的集合,实现了部分与整体的层次结构。这种模式将对象组织成树形结构,使得客户端可以一致地处理单个对象和对象组合,即“部分-整体”的...

    设计模式C++学习之组合模式(Composite)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分-整体关系,使得我们能够以统一的方式处理单个对象和对象集合。在C++中,组合模式的应用可以帮助我们构建灵活且易于操作的对象层次结构,使得客户端...

    设计模式-组合模式(讲解及其实现代码)

    组合模式是一种结构型设计模式,它允许我们使用树形结构来表示部分与整体的关系,使得我们能够以统一的方式来处理单个对象和对象的组合。在组合模式中,单个对象和组合对象都被视为同一类型,这使得客户端代码可以对...

    java设计模式---诙谐易懂版

    设计模式一般分为三大类:创建型模式、结构型模式和行为型模式。 3. 根据文件内容,诸葛亮给赵云的三个锦囊妙计可以用策略模式来实现。每个妙计对应一个实现了策略接口的具体策略类。例如,BackDoor类实现了...

Global site tag (gtag.js) - Google Analytics