![在这里插入图片描述](https://img-blog.csdnimg.cn/20200323153527512.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjM4ODUx,size_16,color_FFFFFF,t_70)
public class Client {
public static void main(String[] args) {
AbstractFile file1,file2,file3,folder1,folder2,folder3;
file1 = new ImageFile("汽车.jpg");
file2 = new VideoFile("非诚勿扰.AVI");
file3 = new TextFile("设计模式.txt");
folder1 = new Folder("最新图片");
folder1.add(file1);
folder2 = new Folder("学习资料");
folder2.add(file2);
folder2.add(file3);
folder3 = new Folder("个人资料");
folder3.add(folder1);
folder3.add(folder2);
folder3.display();
}
}
public interface AbstractFile {
void add(AbstractFile file);
void remove(AbstractFile file);
void display();
}
import java.util.ArrayList;
public class Folder implements AbstractFile {
private ArrayList<AbstractFile> fileList = new ArrayList<>();
private String fileName;
public Folder(String fileName){
this.fileName = fileName;
}
@Override
public void add(AbstractFile file) {
fileList.add(file);
}
@Override
public void remove(AbstractFile file) {
fileList.remove(file);
}
@Override
public void display() {
System.out.println("文件夹-" + fileName + "-包含如下资料:");
for(Object obj : fileList)
{
((AbstractFile)obj).display();
}
}
}
public class TextFile implements AbstractFile {
private String fileName;
public TextFile(String fileName) {
this.fileName = fileName;
}
@Override
public void add(AbstractFile file) {
System.out.println("对不起,不支持该方法!");
}
@Override
public void remove(AbstractFile file) {
System.out.println("对不起,不支持该方法!");
}
@Override
public void display() {
System.out.println("浏览文本文件:" + fileName);
}
}
public class ImageFile implements AbstractFile {
private String fileName;
public ImageFile(String fileName) {
this.fileName=fileName;
}
@Override
public void add(AbstractFile file) {
System.out.println("对不起,不支持该方法!");
}
@Override
public void remove(AbstractFile file) {
System.out.println("对不起,不支持该方法!");
}
@Override
public void display() {
System.out.println("浏览图片文件:" + fileName);
}
}
public class VideoFile implements AbstractFile {
private String fileName;
public VideoFile(String fileName) {
this.fileName = fileName;
}
@Override
public void add(AbstractFile file) {
System.out.println("对不起,不支持该方法!");
}
@Override
public void remove(AbstractFile file) {
System.out.println("对不起,不支持该方法!");
}
@Override
public void display() {
System.out.println("浏览视频文件:" + fileName);
}
}
- 安全组合模式(不透明组合模式)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020032315363118.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjM4ODUx,size_16,color_FFFFFF,t_70)
public class Client {
public static void main(String[] args) {
AbstractFile file1,file2,file3;
Folder folder1,folder2,folder3;
file1 = new ImageFile("汽车.jpg");
file2 = new VideoFile("非诚勿扰.AVI");
file3 = new TextFile("设计模式.txt");
folder1 = new Folder("最新图片");
folder1.add(file1);
folder2 = new Folder("学习资料");
folder2.add(file2);
folder2.add(file3);
folder3 = new Folder("个人资料");
folder3.add(folder1);
folder3.add(folder2);
folder3.display();
}
}
public interface AbstractFile {
void display();
}
import java.util.ArrayList;
public class Folder implements AbstractFile {
private ArrayList<AbstractFile> fileList = new ArrayList<>();
private String fileName;
public Folder(String fileName) {
this.fileName = fileName;
}
public void add(AbstractFile file) {
fileList.add(file);
}
public void remove(AbstractFile file) {
fileList.remove(file);
}
@Override
public void display() {
System.out.println("文件夹-" + fileName + "-包含如下资料:");
for (Object obj : fileList) {
((AbstractFile) obj).display();
}
}
}
public class TextFile implements AbstractFile {
private String fileName;
public TextFile(String fileName) {
this.fileName = fileName;
}
@Override
public void display() {
System.out.println("浏览文本文件:" + fileName);
}
}
public class ImageFile implements AbstractFile {
private String fileName;
public ImageFile(String fileName) {
this.fileName = fileName;
}
@Override
public void display() {
System.out.println("浏览图片文件:" + fileName);
}
}
public class VideoFile implements AbstractFile {
private String fileName;
public VideoFile(String fileName) {
this.fileName = fileName;
}
@Override
public void display() {
System.out.println("浏览视频文件:" + fileName);
}
}