java设计模式---合成模式3
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-2 16:13:59 * 抽象文件角色 */ public interface IFile { //返回自己的实例 IFile getComposite(); //某个商业方法 void sampleOperation(); //获取深度 int getDeep(); //设置深度 void setDeep(int x); }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-2 16:15:03 * 文件夹角色 */ public class Folder implements IFile { private String name; //文件名字 private int deep; //层级深度,根深度为0 private Vector<IFile> componentVector = new Vector<IFile>(); public Folder(String name) { this.name = name; } //返回自己的实例 public IFile getComposite() { return this; } //某个商业方法 public void sampleOperation() { System.out.println("执行了某个商业方法!"); } //增加一个文件或文件夹 public void add(IFile IFile) { componentVector.addElement(IFile); IFile.setDeep(this.deep + 1); } //删除一个文件或文件夹 public void remove(IFile IFile) { componentVector.removeElement(IFile); } //返回直接子文件(夹)集合 public Vector getAllComponent() { return componentVector; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getDeep() { return deep; } public void setDeep(int deep) { this.deep = deep; } }
/** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-2 16:27:15 * 文件 */ public class File implements IFile { private String name; //文件名字 private int deep; //层级深度 public File(String name) { this.name = name; } //返回自己的实例 public IFile getComposite() { return this; } //某个商业方法 public void sampleOperation() { System.out.println("执行了某个商业方法!"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getDeep() { return deep; } public void setDeep(int deep) { this.deep = deep; } }
import java.util.Iterator; import java.util.Vector; /** * Created by IntelliJ IDEA. * User: leizhimin * Date: 2008-8-2 16:35:25 * 遍历树的一个测试 */ public class Client { public static String indentChar = "\t"; //文件层次缩进字符 public static void main(String args[]) { new Client().test(); } /** * 客户端测试方法 */ public void test() { //根下文件及文件夹 Folder root = new Folder("树根"); Folder b1_1 = new Folder("1_枝1"); Folder b1_2 = new Folder("1_枝2"); Folder b1_3 = new Folder("1_枝3"); File l1_1 = new File("1_叶1"); File l1_2 = new File("1_叶2"); File l1_3 = new File("1_叶3"); //b1_2下的文件及文件夹 Folder b2_1 = new Folder("2_枝1"); Folder b2_2 = new Folder("2_枝2"); File l2_1 = new File("2_叶1"); //缔造树的层次关系(简单测试,没有重复添加的控制) root.add(b1_1); root.add(b1_2); root.add(l1_1); root.add(l1_2); b1_2.add(b2_1); b1_2.add(b2_2); b1_2.add(l2_1); root.add(l1_3); root.add(b1_3); //控制台打印树的层次 outTree(root); } public void outTree(Folder folder) { System.out.println(folder.getName()); iterateTree(folder); } /** * 遍历文件夹,输入文件树 * * @param folder */ public void iterateTree(Folder folder) { Vector<IFile> clist = folder.getAllComponent(); //todo:遍历之前可以对clist进行排序,这些都不是重点 for (Iterator<IFile> it = clist.iterator(); it.hasNext();) { IFile em = it.next(); if (em instanceof Folder) { Folder cm = (Folder) em; System.out.println(getIndents(em.getDeep()) + cm.getName()); iterateTree(cm); } else { System.out.println(getIndents(em.getDeep()) + ((File) em).getName()); } } } /** * 文件层次缩进字符串 * * @param x 缩进字符个数 * @return 缩进字符串 */ public static String getIndents(int x) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < x; i++) { sb.append(indentChar); } return sb.toString(); } }
java设计模式---合成模式3的更多相关文章
- Java设计模式-合成模式
合成模式有时也叫组合模式,对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性.掌握组合模式的重点是要理解清楚 "部分/ ...
- java设计模式---合成模式2
合成模式属于对象的结构模式,有时又叫做"部分--整体"模式.合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式 ...
- Java设计模式——组合模式
JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...
- java设计模式--单列模式
java设计模式--单列模式 单列模式定义:确保一个类只有一个实例,并提供一个全局访问点. 下面是几种实现单列模式的Demo,每个Demo都有自己的优缺点: Demo1: /** * 单列模式需要满足 ...
- 3.java设计模式-建造者模式
Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...
- Java设计模式-代理模式之动态代理(附源代码分析)
Java设计模式-代理模式之动态代理(附源代码分析) 动态代理概念及类图 上一篇中介绍了静态代理,动态代理跟静态代理一个最大的差别就是:动态代理是在执行时刻动态的创建出代理类及其对象. 上篇中的静态代 ...
- Java设计模式——外观模式
JAVA 设计模式 外观模式 用途 外观模式 (Facade) 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外观模式是一种结构型模式. 结构
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- 【设计模式】Java设计模式 - 原型模式
[设计模式]Java设计模式 - 原型模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起 ...
随机推荐
- EF实体的部分更新
实现实体的部分更新假设实体InfoHotel如下: public class InfoHotel { public int Id{get;set;} public string Name{get;se ...
- 关于html+ashx开发中几个问题的解决方法的感想和总结
1.针对上篇文章中的服务端处理不敢苟同.仍然坚持使用反射,建立BaseHandler.ashx并在默认process方法中写上反射方法以及权限验证方法.针对具体的情况返回对应的值.服务端其他handl ...
- Web API对application/json内容类型的CORS支持
假设有一简单架构分为前后两部分,其一是Angular构成的前端页面站点,另一个则是通过ASP.NET Web API搭建的后端服务站点.两个站点因为分别布署,所有会有CORS(Cross-Origin ...
- Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件
之前写过一篇关于vue实现dialog会话框组件的文章(http://www.cnblogs.com/fozero/p/8546883.html)[http://www.cnblogs.com/foz ...
- U盘PE无人值守安装centOS6
一.制作 1.需要用到的工具:老毛桃PX工具.系统ISO.一个8GU盘 老毛桃PE工具 http://laomaotao.net/ CentOS启动映像 http://mirrors.163.com/ ...
- Python列表函数&方法
Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表元素最大值 4 min(list)返 ...
- 如何扩展/删除swap分区
背景: 由于安装Oracle 的时候,swap太小只划分了4G,后期发现交换分区太小,不满足使用,于是进行了swap分区的扩容过程: swap分区的扩展很简单,但是需要root用户权限 ...
- Objective-C语法概述
Objective-C语法概述 简称OC 面向对象的C语言 完全兼容C语言 可以在OC里面混入C/C++代码 可以开发IOS和Mac OS X平台应用 语法预览 关键字 基本上都是以@开头(为了与C语 ...
- docker 部署cassandra
摘要 本文主要介绍在redhat7 平台,利用docker 部署cassandra 集群,除了介绍基本的部署步骤,另外主要 讨论类似于cassandra 这种分布式集群系统部署 docker如何进行网 ...
- Android常用的编译命令
1.make -jX X表示数字,这个命令将编译Android系统并生成镜像,XX表示可以使用到的CPU核数,这在配置好的电脑上特别有用,公司的16核ubuntu服务器执行make -j16只要不到2 ...