问题描述:
用透明组合模式实现教材中的“文件夹浏览”这个例子。
类图:
java代码:
1 //AbstractFile.java 2 package shiyan10; 3 4 public abstract class AbstractFile 5 { 6 public abstract void add(AbstractFile element); 7 public abstract void remove(AbstractFile element); 8 public abstract void display(); 9 } 10 //ImageFile.java 11 package shiyan10; 12 13 public class ImageFile extends AbstractFile 14 { 15 private String fileName; 16 public ImageFile(String filename) 17 { 18 this.fileName=new String(); 19 this.fileName=filename; 20 } 21 public void add(AbstractFile element) 22 { 23 System.out.println("add ImageFile"); 24 } 25 public void remove(AbstractFile element) 26 { 27 System.out.println("remove ImageFile"); 28 } 29 public void display() 30 { 31 System.out.print(fileName); 32 System.out.println(" ImageFile"); 33 } 34 } 35 //TextFile.java 36 package shiyan10; 37 38 public class TextFile extends AbstractFile 39 { 40 private String fileName; 41 public TextFile(String filename) 42 { 43 this.fileName=new String(); 44 this.fileName=filename; 45 } 46 public void add(AbstractFile element) 47 { 48 System.out.println("add TextFile"); 49 } 50 public void remove(AbstractFile element) 51 { 52 System.out.println("remove TextFile"); 53 } 54 public void display() 55 { 56 System.out.print(fileName); 57 System.out.println(" TextFile"); 58 } 59 } 60 //VideoFile.java 61 package shiyan10; 62 63 public class VideoFile extends AbstractFile 64 { 65 private String fileName; 66 public VideoFile(String filename) 67 { 68 this.fileName=new String(); 69 this.fileName=filename; 70 } 71 public void add(AbstractFile element) 72 { 73 System.out.println("add VideoFile"); 74 } 75 public void remove(AbstractFile element) 76 { 77 System.out.println("remove VideoFile"); 78 } 79 public void display() 80 { 81 System.out.print(fileName); 82 System.out.println(" VideoFile"); 83 } 84 } 85 //Folder.java 86 package shiyan10; 87 import java.util.*; 88 89 public class Folder extends AbstractFile 90 { 91 private String fileName; 92 private ArrayList<AbstractFile> fileList=new ArrayList(); 93 public Folder(String filename) 94 { 95 this.fileName=new String(); 96 this.fileName=filename; 97 } 98 public void add(AbstractFile element) 99 { 100 fileList.add(element); 101 System.out.println("add Folder"); 102 } 103 public void remove(AbstractFile element) 104 { 105 fileList.remove(element); 106 System.out.println("remove Folder"); 107 } 108 public void display() 109 { 110 System.out.println(fileName); 111 for(Object object:fileList) 112 { 113 ((AbstractFile)object).display(); 114 } 115 System.out.println("****Folder display****"); 116 } 117 } 118 //Client.java 119 package shiyan10; 120 public class Client 121 { 122 public static void main(String a[]) 123 { 124 AbstractFile obj1,obj2,obj3,obj4; 125 Folder plate1,plate2,plate3; 126 obj1=new ImageFile("a.jpg"); 127 obj2=new TextFile("b.txt"); 128 plate1=new Folder("Image_Text"); 129 plate1.add(obj1); 130 plate1.add(obj2); 131 132 obj3=new VideoFile("c.mp4"); 133 plate2=new Folder("Image_Video"); 134 plate2.add(obj1); 135 plate2.add(obj3); 136 137 obj4=new ImageFile("d.jpg"); 138 plate3=new Folder("Image_Text_Video_Folder"); 139 plate3.add(plate1); 140 plate3.add(plate2); 141 plate3.add(obj4); 142 143 plate3.display(); 144 145 } 146 }