• 【设计模式】组合模式


    使用频率:★★★★☆

    一、什么是组合模式

    树形结构的实现,用于描述“整体-部分”的关系;

    二、补充说明

    使用场景:部分/整体场景,如树形菜单; 文件/文件夹; 树形结构的公司层级关系...

    三、角色

    抽象角色

    叶子角色

    树枝角色

    客户端角色

    四、例子,JAVA实现

    利用组合模式实现如下文件/文件夹的树形结构关系;

    抽象角色,抽象文件: 具体文件和具体文件夹都继承该抽象文件角色

    package com.pichen.dp.structuralpattern.combination;
    public abstract class File {
    
        protected String name;
        
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public abstract void showFileName();
        
        
    }

    树枝角色:具体文件夹

    package com.pichen.dp.structuralpattern.combination;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Folder extends File{
    
        
        private List<File> fileList = new ArrayList<File>();
        
        public Folder(String name) {
            this.name = name;
        }
        @Override
        public void showFileName() {
            System.out.println(this.name);
        }
    
        public void addFile(File file){
            fileList.add(file);
        }
        
        //打印文件夹下的文件名
        public void displayFiles(){
            for(File file : this.fileList){
                file.showFileName();
            }
        }
    }

    叶子角色:具体文件

    package com.pichen.dp.structuralpattern.combination;
    public class TXTFile extends File{
    
        public TXTFile(String name) {
            this.name = name;
        }
        
        @Override
        public void showFileName() {
            System.out.println(this.name);
            
        }
    
    }
    package com.pichen.dp.structuralpattern.combination;
    public class AVIFile extends File{
        public AVIFile(String name) {
            this.name = name;
        }
    
        @Override
        public void showFileName() {
            System.out.println(this.name);
        }
    }

    客户端,模拟文件/文件夹树形结构

    package com.pichen.dp.structuralpattern.combination;
    public class Main {
    
        public static void main(String[] args) {
            Folder folder = new Folder("一级目录");
            File txtFile = new TXTFile("二级文件txt");
            File aviFile = new AVIFile("二级文件avi");
            Folder txtFolder = new Folder("二级txt目录");
            Folder aviFolder = new Folder("二级avi目录");
    
            File txtFile1 = new TXTFile("三级文件txt1");
            File txtFile2 = new TXTFile("三级文件txt2");
            File txtFile3 = new TXTFile("三级文件txt3");
            File aviFile1 = new AVIFile("三级文件avi1");
            File aviFile2 = new AVIFile("三级文件avi2");
            
            folder.addFile(txtFile);
            folder.addFile(aviFile);
            folder.addFile(txtFolder);
            folder.addFile(aviFolder);
            
            txtFolder.addFile(txtFile1);
            txtFolder.addFile(txtFile2);
            txtFolder.addFile(txtFile3);
            
            aviFolder.addFile(aviFile1);
            aviFolder.addFile(aviFile2);
            
            System.out.println("一级目录下的文件:");
            folder.displayFiles();
            System.out.println("
    二级txt目录下的文件:");
            txtFolder.displayFiles();
            System.out.println("
    二级avi目录目录下的文件:");
            aviFolder.displayFiles();
        }
    }

    打印结果:

    一级目录下的文件:
    二级文件txt
    二级文件avi
    二级txt目录
    二级avi目录
    
    二级txt目录下的文件:
    三级文件txt1
    三级文件txt2
    三级文件txt3
    
    二级avi目录目录下的文件:
    三级文件avi1
    三级文件avi2
  • 相关阅读:
    JVM内存分析 规格严格
    比MyBatis快了100倍 规格严格
    jstatd运行,远端监控 规格严格
    浅谈Linux下查看某一进程占用的内存 规格严格
    如何查看jvm堆外内存使用情况? 规格严格
    nginx location中uri的截取的实现方法 规格严格
    date获取毫秒和秒 规格严格
    DAX 第四篇:行上下文
    钓鱼邮件
    Htmx 使html 也可以发送请求
  • 原文地址:https://www.cnblogs.com/chenpi/p/5196870.html
Copyright © 2020-2023  润新知