设计模式-组合模式的应用
发布日期:2021-06-30 17:44:40 浏览次数:3 分类:技术文章

本文共 3635 字,大约阅读时间需要 12 分钟。

组合模式的应用

文件浏览

文件有不同类型,不同类型的文件其浏览方式有所区别,如文本文件和图片文件的浏览方式就不相同。对文件夹的浏览实际上就是对其中所包含文件的浏览,而客户端可以一致地对文件和文件夹进行操作,无须关心它们的区别。使用组合模式来模拟文件的浏览操作。利用组合者模式设计,用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
fileList = new ArrayList
(); 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(); }}

【运行截图】

运行结果

组合模式的适用性如下:

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

转载地址:https://lexiaoyuan.blog.csdn.net/article/details/89074182 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:设计模式-适配器模式的应用
下一篇:设计模式-单例模式的应用

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月11日 16时23分41秒