Entry.java:

package gendwang.cisco.com;

public abstract class Entry
{
private int height = 0;
private String name;
private Type type; public Entry(String name)
{
this.name = name;
} public int getHeight() {
return height;
} public void setHeight(int height) {
this.height = height;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Type getType() {
return type;
} public void setType(Type type) {
this.type = type;
} public abstract void print();
}

File.java:

package gendwang.cisco.com;

public class File extends Entry
{
public File(String name)
{
super(name);
setType(Type.File);
} public void print()
{
int numOfWhiteSpace = getHeight() * 2;
for(int i = 0; i < numOfWhiteSpace; i++)
{
System.out.print(" ");
} System.out.println(getName());
}
}

Directory.java:

package gendwang.cisco.com;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List; public class Directory extends Entry
{
private List<Entry> list = new LinkedList<Entry>(); public Directory(String name)
{
super(name);
setType(Type.Directory);
} public void addEntry(Entry entry)
{
int myHeight = getHeight();
incrementHeight(entry, myHeight + 1); list.add(entry);
} public List<Entry> getChilden()
{
return list;
} public void print()
{
int numOfWhiteSpace = getHeight() * 2;
for(int i = 0; i < numOfWhiteSpace; i++)
{
System.out.print(" ");
}
System.out.println(getName()); Iterator<Entry> itor = list.iterator();
while(itor.hasNext())
{
Entry entry = itor.next();
entry.print();
}
} private void incrementHeight(Entry entry, int added)
{
int height = entry.getHeight();
entry.setHeight(height + added); if(entry.getType() == Type.Directory)
{
Directory dir = (Directory)entry;
List<Entry> list = dir.getChilden();
Iterator<Entry> itor = list.iterator();
while(itor.hasNext())
{
Entry tmp = itor.next();
incrementHeight(tmp, added);
}
}
}
}

Type.java:

package gendwang.cisco.com;

public enum Type
{
File,
Directory
}

Test.java:

package gendwang.cisco.com;

public class Test
{
public static void main(String[] args)
{
Directory dir1 = new Directory("tmp");
Entry file1 = new File("hello.jpg");
Entry file2 = new File("install.log");
dir1.addEntry(file1);
dir1.addEntry(file2); Directory dir2 = new Directory("system"); Directory dir3 = new Directory("windows");
dir3.addEntry(dir1);
dir3.addEntry(dir2); Directory dir4 = new Directory("root");
Entry file3 = new File("password");
dir4.addEntry(file3);
dir4.addEntry(dir3); dir4.print();
}
}

设计模式6:Composite的更多相关文章

  1. [学习笔记]设计模式之Composite

    为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在Composite(组合)模式中,用户可以使用多个简单的组件以形成较大的组件,而这些组件还可能进一步组合成更大的.它重要的特性是能够 ...

  2. 设计模式之Composite(组合)(转)

    Composite定义: 将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Comp ...

  3. 设计模式之Composite

    设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) Composite定义? 将对象以树形结构组织起来,以达成“部分-整体” 的层次结构. 想到Compo ...

  4. 【设计模式】Composite

    目录 前言 安卓View的实现 View Beyond setContentView setContentView做了什么事情? 如何将xml文件变成对象的? 小结 View的绘制流程 三个流程 三个 ...

  5. 设计模式之Composite(组合)模式

    1.出现原因 1.在面向对象系统中,我们常会遇到一类具有“容器”特征的对象——即它们在充当对象的同时,又是其他对象的容器. 如何将“客户代码与复杂的对象容器结构”解耦(将这种组合容器对象设计成树形结构 ...

  6. 设计模式之Composite模式(笔记)

    组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户 ...

  7. 设计模式(9)--Composite(组合模式)--结构型

    1.模式定义: 组合模式属于对象的结构模式,有时又叫做“部分——整体”模式.组合模式将对象组织到树结构中,可以用来描述整体与部分的关系.组合模式可以使客户端将单纯元素与复合元素同等看待. 2.模式特点 ...

  8. 设计模式之——Composite模式

    composite模式又叫做组合模式/复合模式. 它是一种能够使容器与内容具有一致性,创造出递归结构的模式. 示例程序是列出文件夹以及其内部文件与文件夹一览的功能: 可以由示例图看出,有一个电影文件夹 ...

  9. 设计模式之——Composite组合模式

    上周面试,面试官问桥接模式是什么,我就举了个例子:手机分为苹果,小米....,每个手机都有视频,游戏...等功能.直观上是一个树形结构.这种情况下,可以用桥接模式,把手机作为接口,苹果,小米等继承手机 ...

  10. 设计模式:composite模式

    目的:使容器和内容具备一致性 实现:将对象组合成树形结构以表示“部分-整体”的层次结构 实例:文件夹中可以包含文件夹也可以包含文件 例子: class Item //接口定义 { public: vi ...

随机推荐

  1. iOS NSRuntime机制

    什么是Objective-C runtime? 简单来说,Objective-C runtime是一个实现Objective-C语言的C库.对象可以用C语言中的结构体表示,而方法(methods)可以 ...

  2. 使用Intel编译器获得一致的浮点数值计算结果

    使用Intel编译器获得一致的浮点数值计算结果大多数十进制的浮点数, 用二进制表示时不是完全一致的; 与此同时, 大多数与浮点数值相关的计算结果, 存在着固有的不确定性.通常, 编写浮点计算应用软件希 ...

  3. Oracle的function

    写在这里,以便于以后忘记格式后可以查询. CREATE OR REPLACE FUNCTION TEMP_FUNC_WYL(PI_AAA100 VARCHAR2, PI_AAA102 VARCHAR2 ...

  4. 构件图(Component Diagram)—UML图(八)

    构件图是显示代码自身结构的实现级别的图表.构件图由诸如源码文件.二进制代码文件.可运行文件或动态链接库 (DLL) 这种构件构成,并通过依赖关系相连接 以下这张图介绍了构件图的基本内容: 以下这张图是 ...

  5. cxf调用c#的webservice

    java调用c#的webservice,如今已经測试通过.并且用到了项目中. 如今把实现方式和遇到的问题分享给大家.详细源代码例如以下: JaxWsDynamicClientFactory dcf = ...

  6. Hadoop源码解析之: TextInputFormat如何处理跨split的行

    我们知道hadoop将数据给到map进行处理前会使用InputFormat对数据进行两方面的预处理: 对输入数据进行切分,生成一组split,一个split会分发给一个mapper进行处理. 针对每个 ...

  7. EasyUI - tab动态加载datagrid

    addTab: function() { $("#myTabs").tabs('add', { title: 'my title', closable: true, tools: ...

  8. c++构造析构顺序

    class A { public: A(){ cout << "constrcut A" << endl; }; ~A(){ cout << & ...

  9. dll文件32位64位检测工具以及Windows文件夹SysWow64的坑(很详细,还有自动动手编程探测dll)

    阅读目录 dll文件不匹配导致数据库无法启动 究竟是System32还是SysWow64 区分dll文件32位64位的程序让我倍感迷惑 再次判断究竟是System32还是SysWow64——意想不到的 ...

  10. cocos2d-x游戏开发系列教程-中国象棋04-摆棋

    前情回顾 在之前的学习中,我们已经了解到,下棋主界面是由CCMainMenu类实现的,在它的init函数中,初始化了 主界面需要的各种数据,包括:创建控件,初始化32个棋子,初始化执行变量等等,在这个 ...