设计模式-组合模式的应用

组合模式的应用

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

【模式UML图】

【模式代码(JAVA语言实现)】
// AbstractFile.java:

package sdp.sy_5.compositepattern;

public abstract class AbstractFile {
   
	public void add(AbstractFile element) {
   
	}
	public void remove(AbstractFile element) {
   
	}
	public void display() {
   
	}
	
}

// ImageFile.java:

package sdp.sy_5.compositepattern;

public class ImageFile extends AbstractFile{
   
	private String fileName;
	
	public ImageFile(String fileName) {
   
		this.fileName = fileName;
	}

	@Override
	public void add(AbstractFile element) {
   
		System.out.println(fileName+" ImageFile add successfully!");
	}
	
	@Override
	public void remove(AbstractFile element) {
   
		System.out.println(fileName+" ImageFile remove successfullly!");
	}
	
	@Override
	public void display() {
   
		System.out.print(fileName);
	}
}

// TextFile.java:

package sdp.sy_5.compositepattern;

public class TextFile extends AbstractFile{
   
	private String fileName;
	
	public TextFile(String fileName) {
   
		this.fileName = fileName;
	}
		
	@Override
	public void add(AbstractFile element) {
   
		System.out.println(fileName+" TextFile add successfully!");
	}
	
	@Override
	public void remove(AbstractFile element) {
   
		System.out.println(fileName+" TextFile remove successfully!");
	}
	
	@Override
	public void display() {
   
		System.out.print(fileName);
	}
}

// VideoFile.java:

package sdp.sy_5.compositepattern;

public class VideoFile extends AbstractFile{
   
	private String fileName;
	
	public VideoFile(String fileName) {
   
		this.fileName = fileName;
	}
		
	@Override
	public void add(AbstractFile element) {
   
		System.out.println(fileName+" VideoFile add successfully!");
	}
	
	@Override
	public void remove(AbstractFile element) {
   
		System.out.println(fileName+" VideoFile remove successfully!");
	}
	
	@Override
	public void display() {
   
		System.out.print(fileName);
	}
}

// Folder.java:

package sdp.sy_5.compositepattern;

import java.util.ArrayList;

public class Folder extends AbstractFile{
   
	private ArrayList<AbstractFile> fileList = new ArrayList<AbstractFile>();
	private String fileName;
	
	public Folder(String fileName) {
   
		this.fileName = fileName;
	}
	
	@Override
	public void add(AbstractFile element) {
   
		fileList.add(element);
		element.display();
		System.out.println(" add to "+fileName+" successfully!");
	}
	
	@Override
	public void remove(AbstractFile element) {
   
		fileList.remove(element);
		element.display();
		System.out.println(" remove to "+fileName+" successfully!");
	}
	
	@Override
	public void display() {
   
		System.out.println("FolderName:"+fileName);
		System.out.println("FileName:");
		for(Object object:fileList)
		{
   
			((AbstractFile)object).display();
			System.out.println();
		}
	}
	
}

// Client.java:

package sdp.sy_5.compositepattern;

public class Client {
   

	public static void main(String[] args) {
   
		AbstractFile imageFile,textFile,videoFile;
		Folder folder;
		
		imageFile = new ImageFile("image.img");
		textFile = new TextFile("text.txt");
		videoFile = new VideoFile("video.mp4");
		folder = new Folder("testFolder");
		
		System.out.println("add file to folder:");
		folder.add(imageFile);
		folder.add(textFile);
		folder.add(videoFile);
		
		System.out.println("display folder:");
		folder.display();
		System.out.println("------------------------");
		
		System.out.println("remove file with folder:");
		folder.remove(imageFile);
		folder.remove(textFile);
		folder.remove(videoFile);
		
		System.out.println("display folder:");
		folder.display();
		

	}

}

【运行截图】

组合模式的适用性如下:

  • 你想表示对象的部分-整体层次结构。
  • 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
全部评论

相关推荐

点赞 评论 收藏
分享
05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务