《软件设计》组合模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解组合模式的动机,掌握该模式的结构;
2、能够利用组合模式解决实际问题。
[实验任务一]:组合模式
用透明组合模式实现教材中的“文件夹浏览”这个例子。
实验要求:
1. 文件的执行不需真正实现,只需简单提示即可;
代码:
//AbstractFile.java public abstract class AbstractFile { public abstract void add(AbstractFile element); public abstract void remove(AbstractFile element); public abstract void display(); } public class Client { public static void main(String a[]) { AbstractFile obj1,obj2,obj3,obj4; Folder plate1,plate2,plate3; obj1= new ImageFile( "a.jpg" ); obj2= new TextFile( "b.txt" ); plate1= new Folder( "Image_Text" ); plate1.add(obj1); plate1.add(obj2); obj3= new VideoFile( "c.mp4" ); plate2= new Folder( "Image_Video" ); plate2.add(obj1); plate2.add(obj3); obj4= new ImageFile( "d.jpg" ); plate3= new Folder( "Image_Text_Video_Folder" ); plate3.add(plate1); plate3.add(plate2); plate3.add(obj4); plate3.display(); } } import java.util.*; public class Folder extends AbstractFile { private String fileName; private ArrayList<AbstractFile> 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( "add Folder" ); } public void remove(AbstractFile element) { fileList.remove(element); System.out.println( "remove Folder" ); } public void display() { System.out.println(fileName); for (Object object:fileList) { ((AbstractFile)object).display(); } System.out.println( "****Folder display****" ); } } 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( "add ImageFile" ); } public void remove(AbstractFile element) { System.out.println( "remove ImageFile" ); } public void display() { System.out.print(fileName); System.out.println( " ImageFile" ); } } 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( "add TextFile" ); } public void remove(AbstractFile element) { System.out.println( "remove TextFile" ); } public void display() { System.out.print(fileName); System.out.println( " TextFile" ); } } 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( "add VideoFile" ); } public void remove(AbstractFile element) { System.out.println( "remove VideoFile" ); } public void display() { System.out.print(fileName); System.out.println( " VideoFile" ); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)