组合模式

问题描述:

用透明组合模式实现教材中的“文件夹浏览”这个例子。

类图:

 

 

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 }
复制代码

 

运行结果:

posted @ 2021-09-20 18:21  奇怪的软工人  阅读(35)  评论(0编辑  收藏  举报