组合模式
2015-11-24 13:56
176 查看
组合模式
组合模式(Composite Pattern)中通过组合多个对象形成树型结构以表示“整体--部分”的结构层次。组合模式对单个对象(叶子对象)和组合对象(容器对象)的使用具有一致性。组合模式又称为“整体----部分”(Part--Whole)模式。Component:表示抽象构建,可以是接口或抽象类;
Leaf:表示叶子构建,在组合中表示叶子对象,叶子节点没有子节点,它实现了抽象接口构建接口声明的基本行为;
Composite:表示容器构建,它定义包含子节点的构建的行为,并存储子节点,它实现抽象构建接口中定义的操作叶子构建的行为;
抽象构件:抽象文件类
package Abstraction; public abstract class AbstractFile { public abstract void add(AbstractFile element); public abstract void remove(AbstractFile element); public abstract void display(); }容器构件:文件夹类
package Component; import java.util.ArrayList; import Abstraction.AbstractFile; 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); } @Override public void display() { System.out.println("文件夹"+fileName+"-包含如下资源:"); for(Object obj:fileList){ ((AbstractFile)obj).display(); } } @Override public void remove(AbstractFile element) { this.remove(element); } }
叶子构件:ImageFile
package Component; import Abstraction.AbstractFile; public class ImageFile extends AbstractFile { private String fileName; public ImageFile(String fileName){ this.fileName=fileName; } @Override public void add(AbstractFile element) { System.out.println("对不起,不支持该方法"); } @Override public void display() { System.out.println("浏览图片"+fileName); } @Override public void remove(AbstractFile element) { System.out.println("对不起,不支持该方法"); } }
叶子构件:VideoFile
package Component; import Abstraction.AbstractFile; public class VideoFile extends AbstractFile { private String fileName; public VideoFile(String fileName){ this.fileName=fileName; } @Override public void add(AbstractFile element) { System.out.println("对不起,不支持该方法"); } @Override public void display() { System.out.println("浏览视频文件:"+fileName); } @Override public void remove(AbstractFile element) { System.out.println("对不起,不支持该方法"); } }
叶子构件:TextFile
package Component; import Abstraction.AbstractFile; public class TextFile extends AbstractFile { private String fileName; public TextFile(String fileName){ this.fileName=fileName; } @Override public void add(AbstractFile element) { System.out.println("对不起,不支持该方法"); } @Override public void display() { System.out.println("浏览文本文件"+fileName); } @Override public void remove(AbstractFile element) { System.out.println("对不起,不支持该方法"); } }Test:
package Test; import Abstraction.AbstractFile; import Component.Folder; import Component.ImageFile; import Component.TextFile; import Component.VideoFile; public class Test { /** * @param args */ public static void main(String[] args) { AbstractFile file1,file2,file3,file4,file5,folder1,folder2,folder3; file1=new ImageFile("房子.jpg"); file2=new ImageFile("美女.jpg"); file3=new TextFile("设计模式.txt"); file4=new TextFile("java程序设计.txt"); file5=new VideoFile("99999.rmvb"); folder1=new Folder("最新图片"); folder1.add(file1); folder1.add(file2); folder2=new Folder("学校资料"); folder2.add(file3); folder2.add(file4); folder3=new Folder("个人资料"); folder3.add(file5); folder3.add(folder1); folder3.add(folder2); folder3.display(); } }测试结果:
相关文章推荐
- Oracle-PL/SQL
- vjousoj P1211 生日日数
- 设计模式 - 行为型模式 - 命令模式
- android访问网络,下载图片,并设置UI
- Linux 命令行发邮件sendmail,mailutils,mutt msmtp
- SimpleMappingExceptionResolver的使用
- [知其然不知其所以然-10] linux dmi table matching
- Eclipse+Maven创建webapp项目
- Android Handler 异步消息处理机制的妙用 创建强大的图片加载类
- iOS中ASIHTTPRequest和AFNetworking的区别
- 触发碰撞事件=大于一个刚体(刚体才可能有碰撞)+两个碰撞器(范围)+istrigle为true
- android-seekbar的thumb图片不居中显示的处理办法
- Jquery函数的几种写法
- NSStream概述
- 【模板】【bzoj3224】Tyvj 1728 普通平衡树 Treap
- 解决DatePickerDialog和TimePickerDialog控件取消按钮问题
- M1阶段事后总结
- 为什么成为一名程序员这么难?
- Java 8的八个新特性
- jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理