`

设计模式之组合模式composite

 
阅读更多

组合模式

内容
把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象
 
核心
  • 抽象构件(Component)角色:定义了叶子和容器构件的共同点
  • 叶子(Leaf)构件角色:无子节点
  • 容器(Composite)构件角色:有容器特征,可以包含子节点

结构图:


 
组合模式工作流程分析
  • 组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组合,使得用户在使用时可以一致性的对待容器和叶子
  • 当容器对象的指定方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员,并调用执行,其中,使用了递归调用的机制对整个结构进行处理

实例代码

 

1.模板

/**
 * 抽象组件
 */

public interface Component {
    void operation();
}

//叶子组件
interface Leaf extends Component{

}

//容器组件
interface Composite extends Component{
    void add(Component c);
    void remove(Component c);
    Component getChild(int index);
}

 

2.实例

public interface AbstractFile {
    void killVirus();
}

//具体文件 叶子节点
class ImageFile implements AbstractFile{
    private String name;

    public ImageFile(String name){
        super();
        this.name = name;
    }

    @Override
    public void killVirus() {
       System.out.println("杀图片文件:"+name+"--的病毒");
    }
}

class TextFile implements AbstractFile{
    private String name;

    public TextFile(String name){
        super();
        this.name = name;
    }

    @Override
    public void killVirus() {
        System.out.println("杀文本文件:"+name+"的病毒");
    }
}

class VideoFile implements AbstractFile{
    private String name;

    public VideoFile(String name){
        super();
        this.name = name;
    }

    @Override
    public void killVirus() {
        System.out.println("杀视频文件"+name+"的病毒");
    }
}

//容器

class Folder implements AbstractFile{

    String name;

    List<AbstractFile> list = new ArrayList<>();//保存容器的子节点

    public Folder(String name){
        super();
        this.name = name;
    }

    void add(AbstractFile c){
        list.add(c);
    }

    void remove(AbstractFile c){
        list.remove(c);
    }

    AbstractFile getChild(int index){
        return list.get(index);
    }

    @Override
    public void killVirus() {
        System.out.println("对文件夹:"+name+"进行查杀");
        //进行递归处理
        for(AbstractFile file : list){
            file.killVirus();
        }
    }

}


ublic class Client {

    public static void main(String[] args){

        AbstractFile file1,file2,file3;
        Folder folder = new Folder("文件夹");
        file1 = new ImageFile("girl.jpg");
        file2 = new TextFile("test.txt");
        file3 = new VideoFile("video.bmp");

        folder.add(file1);
        folder.add(file2);
        folder.add(file3);
        folder.killVirus();

    }
}

  

场景
  • 操作系统的资源管理器
  • XML文件解析
  • OA系统中,组织结构的处理
  • Junit单元测试框架:底层设计就是典型的组合模式,TestCase叶子节点,TestUnite容器,Test接口(抽象) 
  • 大小: 25.7 KB
分享到:
评论

相关推荐

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

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

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

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

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

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

    设计模式_组合模式.zip

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的...

    JAVA设计模式chm文档

    设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...

    C++设计模式课件20_Composite_组合模式.pdf

    组合模式(Composite Pattern)是一种树形结构的设计模式,它将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户可以对单个对象和组合对象进行一致性的操作处理,即客户程序可以像操作单个对象...

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

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

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

    ### C#面向对象设计模式纵横谈之Composite组合模式解析 #### 标题解析与核心概念 标题中的“C#面向对象设计模式纵横谈(9):Composite组合模式(结构型模式)”明确了文章的主题聚焦于C#语言环境下的设计模式探讨,...

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

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

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    设计模式文档 chm

    设计模式之Composite(组合) 设计模式之Decorator(油漆工) 设计模式之Bridge 设计模式之Flyweight(享元) 行为模式: 设计模式之Template 设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of ...

    24种设计模式以及混合设计模式

    其中包括代理模式(Proxy)、装饰器模式(Decorator)、适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、外观模式(Facade)和享元模式(Flyweight)。这些模式帮助我们在不修改原有代码的情况...

    Java 23种设计模式12组合模式.pdf

    ### Java 23种设计模式之组合模式 #### 模式概述 组合模式是一种结构型设计模式,主要用于处理树形结构中的对象集合问题。通过这种模式,我们可以将多个对象组织成树形结构来表示“整体-部分”的层级关系,并允许...

    设计模式-组合实体

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

    组合模式 Composite Pattern

    **组合模式**(Composite Pattern)是一种常用的结构型设计模式,主要用于构建具有层次结构的对象系统。它允许客户端以一致的方式处理单个对象和组合对象,简化了高层模块的调用。通过组合模式,可以将多个对象组织成...

    设计模式之组合模式

    组合模式是一种软件设计模式,属于结构型模式,它允许我们以统一的方式处理单个对象(叶子)和对象容器(组合)。这种模式的核心思想是“部分-整体”关系,即组合对象和单个对象在程序中可以被以相同的方式处理,...

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

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

    Composite Pattern(组合模式)

    **组合模式(Composite Pattern)详解** 组合模式是一种结构型设计模式,它将对象组织成树形结构,使得用户可以对单个对象和对象集合进行统一操作。这种模式在处理部分与整体关系时非常有用,允许我们一致地处理...

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

    **设计模式面面观:组合模式(Composite Pattern)** 组合模式是软件工程中的一种结构型设计模式,它允许我们以树形结构来表示部分与整体的关系,使得客户端代码可以一致地处理单个对象和对象组合。在组合模式中,...

Global site tag (gtag.js) - Google Analytics