重要程度:★★★★☆ 一、什麼是組合模式 樹形結構的實現,用於描述“整體-部分”的關係; 二、補充說明 使用場景:部分/整體場景,如樹形菜單; 文件/文件夾; 樹形結構的公司層級關係... 三、角色 抽象角色 葉子角色 樹枝角色 客戶端角色 四、例子,JAVA實現 利用組合模式實現如下文件/文件夾的
重要程度:★★★★☆
一、什麼是組合模式
樹形結構的實現,用於描述“整體-部分”的關係;
二、補充說明
使用場景:部分/整體場景,如樹形菜單; 文件/文件夾; 樹形結構的公司層級關係...
三、角色
抽象角色
葉子角色
樹枝角色
客戶端角色
四、例子,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