เมนูนำทาง
คอมโพสิตแพตเทิร์น ตัวอย่างโปรแกรมตัวอย่างโปรแกรมเพื่อแสดงโครงสร้างของ File System โดยแบ่งเป็นแฟ้มและเอกสารที่อยู่ภายในแฟ้ม และการแสดงรายชื่อของแฟ้มและเอกสารภายใน
อินเตอร์เฟส File
เป็นแม่แบบของส่วนประกอบต่างๆ ของคอมโพสิต นิยามเมธอด list()
เพื่อให้แต่ละองค์ประกอบพิมพ์ชื่อของตัวเองและองค์ประกอบย่อยที่อยู่ภายใต้
public interface File { public void list(); public void addFile(File file); public void removeFile(File file);}
คลาส Folder
สามารถมีอ็อบเจกต์ชนิด File
อื่นๆ อยู่ภายใต้ได้ คือมีได้ทั้ง Folder
ย่อยและ Document
เมธอด list()
จะพิมพ์ชื่อของตนเองและตามด้วยการเรียกเมธอด list()
ของทุก File
ที่อยู่ภายใต้ Folder
เมธอด addFile()
และ removeFile()
ทำหน้าที่จัดการกับ File
ย่อยๆ ภายใต้ Folder
public class Folder implements File { private String name; private ArrayList<File> files = new ArrayList<File>(); public Folder(String name) { this.name = name; } public void addFile(File file) { files.add(file); } public void removeFile(File file) { files.remove(file); } public void list() { System.out.println("Folder: " + name); for (File file : files) { file.list(); } }}
คลาส Document
เป็นส่วนปลายสุดหรือส่วนย่อยที่สุดของคอมโพสิต ไม่สามารถมีส่วนอื่นๆ ภายใต้ ดังนั้นเมธอด list()
จึงมีหน้าที่เพียงพิมพ์ชื่อของตนเองและเมธอด addFile()
และ removeFile()
ไม่ต้องทำอะไร
public class Document implements File { private String name; public Document(String name) { this.name = name; } public void list() { System.out.println("Document: " + name); } public void addFile(File file) { // do nothing } public void removeFile(File file) { // do nothing }}
การเรียกใช้งาน
File root = new Folder("root");root.addFile(new Document("one.doc"));File sub = new Folder("sub");sub.addFile(new Document("two.doc"));sub.addFile(new Document("three.doc"));root.addFile(sub);root.list();
เมนูนำทาง
คอมโพสิตแพตเทิร์น ตัวอย่างโปรแกรมใกล้เคียง
คอมโพสิตแพตเทิร์น คอมพิวเตอร์ คอมพิวเตอร์ส่วนบุคคล คอมพิวเตอร์โอลิมปิกระหว่างประเทศ คิมโพ คอมพิวเตอร์โอลิมปิกระดับชาติ ประเทศไทย คอมไพเลอร์ คอมพิวเตอร์กราฟิกส์ คอมพลีตเบสต์ คอมพิวเตอร์วิทัศน์แหล่งที่มา
WikiPedia: คอมโพสิตแพตเทิร์น http://www.javaworld.com/javaworld/jw-09-2002/jw-0... http://web.archive.org/20021029073014/home.earthli...