大三打卡(11.1)

实验10:组合模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

1、理解组合模式的动机,掌握该模式的结构;

2、能够利用组合模式解决实际问题。

 
   

 


[实验任务一]:组合模式

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

实验要求:

1.文件的执行不需真正实现,只需简单提示即可;

2.提交源代码;

package RJSJ.test10;

 

public abstract class AbstractFile

{

    public abstract void add(AbstractFile element);

    public abstract void remove(AbstractFile element);

    public abstract void display();

}

package RJSJ.test10;

 

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("Folder:add");

    }

 

    public void remove(AbstractFile element) {

        fileList.remove(element);

        System.out.println("Folder:remove");

    }

 

    public void display() {

        for (Object object : fileList) {

            ((AbstractFile) object).display();

        }

        System.out.println("Folder:display");

    }

}

package RJSJ.test10;

 

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("ImageFile:add");

    }

 

    public void remove(AbstractFile element) {

        System.out.println("ImageFile:remove");

    }

 

    public void display() {

        System.out.println(fileName);

        System.out.println("ImageFile:display");

    }

 

}

package RJSJ.test10;

 

public class Main {

    public static void main(String[] args) {

        AbstractFile obj1,obj2,obj3,obj4,obj5;

        Folder plate1,plate2,plate3;

        obj1=new ImageFile("aaa");

        obj2=new TextFile("bbb");

        plate1=new Folder("ccc");

        plate1.add(obj1);

        plate1.add(obj2);

 

        obj3=new VideoFile("ddd");

        obj4=new VideoFile("eee");

        plate2=new Folder("fff");

        plate2.add(obj3);

        plate2.add(obj4);

 

        obj5=new ImageFile("ggg");

        plate3=new Folder("hhh");

        plate3.add(plate1);

        plate3.add(plate2);

        plate3.add(obj5);

 

        plate3.display();

    }

}

package RJSJ.test10;

 

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("TextFile:add");

    }

    public void remove(AbstractFile element)

    {

        System.out.println("TextFile:remove");

    }

    public void display()

    {

        System.out.println(fileName);

        System.out.println("TextFile:display");

    }

}

package RJSJ.test10;

 

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("VideoFile:add");

    }

    public void remove(AbstractFile element)

    {

        System.out.println("VideoFile:remove");

    }

    public void display()

    {

        System.out.println(fileName);

        System.out.println("VideoFile:display");

    }

}

posted @   夏季彼岸德  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示