软件设计体系结构-实验报告5

实验名称     组合模式的应用                      日期 2019 03 26

一、实验目的:

1) 掌握组合模式(Composite)的特点

2) 分析具体问题,使用组合模式进行设计。

 

文件浏览

文件有不同类型,不同类型的文件其浏览方式有所区别,如文本文件和图片文件的浏览方式就不相同。对文件夹的浏览实际上就是对其中所包含文件的浏览,而客户端可以一致地对文件和文件夹进行操作,无须关心它们的区别。使用组合模式来模拟文件的浏览操作。利用组合者模式设计,用JAVA语言实现  (C#控制台应用程序实现)。绘制该模式的UML图。

软件设计体系结构-实验报告5_第1张图片

 

 

二、实验环境:

 

 

 

三、实验内容:

【模式代码(JAVA语言实现)】

package 软件设计体系结构;

public class FolderTest {

    public static void main(String[] args) {

        Folder folder = new Folder("总文件夹");
        TextFile textFile1 = new TextFile("a.txt");
        ImageFile imageFile1 = new ImageFile("a.PNG");
        Folder folder2 = new Folder("新建文件夹");

        folder.add(textFile1);
        folder.add(imageFile1);
        folder.add(folder2);

        TextFile textFile2 = new TextFile("b.txt");
        ImageFile imageFile2 = new ImageFile("b.JPG");
        VideoFile videoFile = new VideoFile("a.avi");

        folder2.add(textFile2);
        folder2.add(imageFile2);
        folder2.add(videoFile);

        folder2.display();

        folder2.remove(imageFile2);

        System.out.println("----------------");
        folder2.display();
    }


}
package 软件设计体系结构;

public abstract class AbstractFile {

    public abstract void add(AbstractFile element);
    public abstract void remove(AbstractFile element);
    public abstract void display();
}
package 软件设计体系结构;

import java.util.ArrayList;

public class Folder extends AbstractFile {

    private String fileName;
    private ArrayList fileList = new ArrayList();
    public Folder(String fileName){
        this.fileName = new String();
        this.fileName = fileName;
    }
    public void add(AbstractFile element){
        fileList.add(element);
        System.out.println("新建  " + element);
    }
    public void remove(AbstractFile element){
        fileList.remove(element);
        System.out.println("删除  " + element);
    }
    public void display(){

        for (Object file : fileList){
            ((AbstractFile)file).display();
            System.out.println("打开  " + file);
        }
    }
}
package 软件设计体系结构;

public class ImageFile extends AbstractFile {

    private String fileName;
    public ImageFile(String fileName){
        this.fileName = new String();
        this.fileName = fileName;
    }
    public void add(AbstractFile element){
        System.out.println("添加图片  " + element);
    }
    public void remove(AbstractFile element){
        System.out.println("删除图片  " + element);
    }
    public void display(){
        System.out.println(fileName + "  打开图片并且欣赏");
    }
}
package 软件设计体系结构;

public class TextFile extends AbstractFile{

    private String fileName;
    public TextFile(String fileName){
        this.fileName = new String();
        this.fileName = fileName;
    }
    public void add(AbstractFile element){
        System.out.println("新增一个文本" + element);
    }
    public void remove(AbstractFile element){
        System.out.println("删除一个文本" + element);
    }
    public void display(){
        System.out.println(fileName + "  打开文本欣赏");
    }
}
package 软件设计体系结构;

public class VideoFile extends AbstractFile {

    private String fileName;
    public VideoFile(String fileName){
        this.fileName = new String();
        this.fileName = fileName;
    }
    public void add(AbstractFile element){
        System.out.println("增加一个片  " + element);
    }
    public void remove(AbstractFile element){
        System.out.println("删除一个片  " + element);
    }
    public void display(){
        System.out.println(fileName + "  正在播放,在线看片");
    }
}

【运行截图】

软件设计体系结构-实验报告5_第2张图片

 

四、心得体会:

 

通过本次实验,学会了使用组合模式。组合模式的适用性如下:

想表示对象的部分-整体层次结构

希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

使用场景:部分、整体场景,如树形菜单,文件、文件夹的管理。

 

 

 

 

 

 

 

 

你可能感兴趣的:(软件设计体系结构)