欢迎来到天天文库
浏览记录
ID:18465576
大小:46.50 KB
页数:7页
时间:2018-09-18
《java设计模式-合成模式的实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、原理图 从原理图可见,File、Folder都可以同等看待苇IFile,为对象管理提供了极大的便利。 当然,树的概念不单单是文件文件夹的层次概念,只是因为这个很形象,实际中还有很多树的概念,比如组织机构,分类层次等等,都是逻辑上的概念,不管是物理上的还是逻辑上的,在Java里都是一样处理的。 二、实例下面以一个逻辑树为例子,以上面的原理图为蓝本,看看如何实现并如何使用这个树,这个结构很简单,但是如何去使用树,遍历树、为我所用还是有一定难度的。 这里主要用到树的递归遍历,如何递归、如何控制遍历层级,如何将逻辑关系转换为(
2、类似)物理关系,这些都是有相当难度的。 废话就不说了,看看便知。 /***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2008-8-216:13:59*抽象文件角色*/publicinterfaceIFile{ //返回自己的实例 IFilegetComposite(); //某个商业方法 voidsampleOperation(); //获取深度 intgetDeep(); //设置深度 voidsetDeep(intx);} importjav
3、a.util.Vector;/***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2008-8-216:15:03*文件夹角色*/publicclassFolderimplementsIFile{ privateStringname; //文件名字 privateintdeep; //层级深度,根深度为0 privateVectorcomponentVector=newVector(); publicFolder(Stringname
4、){ this.name=name; } //返回自己的实例 publicIFilegetComposite(){ returnthis; } //某个商业方法 publicvoidsampleOperation(){ System.out.println("执行了某个商业方法!"); } //增加一个文件或文件夹 publicvoidadd(IFileIFile){ componentVector.addElement(IFile
5、); IFile.setDeep(this.deep+1); } //删除一个文件或文件夹 publicvoidremove(IFileIFile){ componentVector.removeElement(IFile); } //返回直接子文件(夹)集合 publicVectorgetAllComponent(){ returncomponentVector; } publicStringgetName(){ returnname;
6、 } publicvoidsetName(Stringname){ this.name=name; } publicintgetDeep(){ returndeep; } publicvoidsetDeep(intdeep){ this.deep=deep; }} /***CreatedbyIntelliJIDEA.*User:leizhimin*Date:2008-8-216:27:15*文件*/publicclassFileimplementsIFile
7、{ privateStringname; //文件名字 privateintdeep; //层级深度 publicFile(Stringname){ this.name=name; } //返回自己的实例 publicIFilegetComposite(){ returnthis; } //某个商业方法 publicvoidsampleOperation(){ System.out.println("执行了某个商业方法!");
8、 } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){
此文档下载收益归作者所有