设计模式-组合模式的应用
发布日期: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 ArrayListfileList = 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秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MyBatisPlus简单入门(SpringBoot)
2019-04-30
攻防世界web进阶区NewsCenter详解
2019-04-30
攻防世界web进阶PHP2详解
2019-04-30
如何解决词达人问题(新)
2019-04-30
攻防世界web进阶区surpersqli详解
2019-04-30
攻防世界web进阶区easytornado详解
2019-04-30
攻防世界web进阶区web2详解
2019-04-30
xss-labs详解(上)1-10
2019-04-30
xss-labs详解(下)11-20
2019-04-30
攻防世界web进阶区ics-05详解
2019-04-30
攻防世界web进阶区FlatScience详解
2019-04-30
攻防世界web进阶区ics-04详解
2019-04-30
攻防世界web进阶区Cat详解
2019-04-30
攻防世界web进阶区bug详解
2019-04-30
攻防世界web进阶区ics-07详解
2019-04-30
攻防世界web进阶区unfinish详解
2019-04-30
攻防世界web进阶区i-got-id-200超详解
2019-04-30
sql注入总结学习
2019-04-30
leetcode46 全排列
2019-04-30
leetcode121 买卖股票的最佳时机
2019-04-30