博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】组合模式
阅读量:6157 次
发布时间:2019-06-21

本文共 2904 字,大约阅读时间需要 9 分钟。

使用频率:★★★★☆

一、什么是组合模式

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

二、补充说明

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

三、角色

抽象角色

叶子角色

树枝角色

客户端角色

四、例子,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
fileList = new ArrayList
(); 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("\n二级txt目录下的文件:");        txtFolder.displayFiles();        System.out.println("\n二级avi目录目录下的文件:");        aviFolder.displayFiles();    }}

打印结果:

一级目录下的文件:二级文件txt二级文件avi二级txt目录二级avi目录二级txt目录下的文件:三级文件txt1三级文件txt2三级文件txt3二级avi目录目录下的文件:三级文件avi1三级文件avi2

转载于:https://www.cnblogs.com/chenpi/p/5196870.html

你可能感兴趣的文章
Webstrom快捷键
查看>>
BZOJ 2721: [Violet 5]樱花
查看>>
生成某一文件夹内文件清单(批量处理)
查看>>
【转】 SLIC超像素分割详解(一):简介
查看>>
PostgreSQL 数组类型
查看>>
编写一个函数,输入n为偶数时,调用方法求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n...
查看>>
拉马车
查看>>
14.查看信息深入讲解
查看>>
AngularJS(6)-选择框Select
查看>>
初识shell脚本
查看>>
uva 11401思维+预处理
查看>>
9. Palindrome Number
查看>>
android-远程图片获取和本地缓存
查看>>
PHP Smarty变量调节器
查看>>
shell中的字符串操作
查看>>
Node.js 函数
查看>>
Oracle CheckPoint进程
查看>>
仿知乎注册验证码
查看>>
物联网笔记1
查看>>
代码练习
查看>>