设计模式(二十七)------23种设计模式(19):组合模式
2017-12-13 17:43
375 查看
使用频率:★★★★☆
一、什么是组合模式
树形结构的实现,用于描述“整体-部分”的关系;
二、补充说明
使用场景:部分/整体场景,如树形菜单; 文件/文件夹; 树形结构的公司层级关系...
三、角色
抽象角色叶子角色
树枝角色
客户端角色
四、例子,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("\n二级txt目录下的文件:"); txtFolder.displayFiles(); System.out.println("\n二级avi目录目录下的文件:"); aviFolder.displayFiles(); } }
打印结果:
一级目录下的文件: 二级文件txt 二级文件avi 二级txt目录 二级avi目录 二级txt目录下的文件: 三级文件txt1 三级文件txt2 三级文件txt3 二级avi目录目录下的文件: 三级文件avi1 三级文件avi2
@Author 风一样的码农
@HomePageUrl http://www.cnblogs.com/chenpi/
@Copyright 转载请注明出处,谢谢~
相关文章推荐
- 23种设计模式之组合模式
- 23种设计模式-8.组合模式(Composite Pattern)
- JAVA开发的23种设计模式之 --- 组合模式
- 重学java23种设计模式(8)组合模式
- 23种设计模式(19):桥接模式
- Java23种设计模式——组合模式
- 23种设计模式之组合模式
- Java开发中的23种设计模式之十一:组合模式(Composite)
- 23种设计模式(19):代理模式
- 【23种设计模式】之 组合模式(Composite Pattern)
- 23种设计模式(10)java组合模式
- Java 23种设计模式之组合模式
- PHP设计模式19-组合模式
- 23种设计模式3--结构型模式(适配器模式、装饰模式、代理模式、外观模式、桥接模式、组合模式、享元模式)
- 23种设计模式(19)java责任链模式
- 23种设计模式C++实例之组合模式
- c++ 23种设计模式之组合模式
- Java23种设计模式案例:组合模式(Composite)
- 23种设计模式(22):组合模式