设计模式6:Composite
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的更多相关文章
- [学习笔记]设计模式之Composite
为方便读者,本文已添加至索引: 设计模式 学习笔记索引 写在前面 在Composite(组合)模式中,用户可以使用多个简单的组件以形成较大的组件,而这些组件还可能进一步组合成更大的.它重要的特性是能够 ...
- 设计模式之Composite(组合)(转)
Composite定义: 将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite比较容易理解,想到Comp ...
- 设计模式之Composite
设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) Composite定义? 将对象以树形结构组织起来,以达成“部分-整体” 的层次结构. 想到Compo ...
- 【设计模式】Composite
目录 前言 安卓View的实现 View Beyond setContentView setContentView做了什么事情? 如何将xml文件变成对象的? 小结 View的绘制流程 三个流程 三个 ...
- 设计模式之Composite(组合)模式
1.出现原因 1.在面向对象系统中,我们常会遇到一类具有“容器”特征的对象——即它们在充当对象的同时,又是其他对象的容器. 如何将“客户代码与复杂的对象容器结构”解耦(将这种组合容器对象设计成树形结构 ...
- 设计模式之Composite模式(笔记)
组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户 ...
- 设计模式(9)--Composite(组合模式)--结构型
1.模式定义: 组合模式属于对象的结构模式,有时又叫做“部分——整体”模式.组合模式将对象组织到树结构中,可以用来描述整体与部分的关系.组合模式可以使客户端将单纯元素与复合元素同等看待. 2.模式特点 ...
- 设计模式之——Composite模式
composite模式又叫做组合模式/复合模式. 它是一种能够使容器与内容具有一致性,创造出递归结构的模式. 示例程序是列出文件夹以及其内部文件与文件夹一览的功能: 可以由示例图看出,有一个电影文件夹 ...
- 设计模式之——Composite组合模式
上周面试,面试官问桥接模式是什么,我就举了个例子:手机分为苹果,小米....,每个手机都有视频,游戏...等功能.直观上是一个树形结构.这种情况下,可以用桥接模式,把手机作为接口,苹果,小米等继承手机 ...
- 设计模式:composite模式
目的:使容器和内容具备一致性 实现:将对象组合成树形结构以表示“部分-整体”的层次结构 实例:文件夹中可以包含文件夹也可以包含文件 例子: class Item //接口定义 { public: vi ...
随机推荐
- MSSQLServer的备份与还原
最近用到了mssql2000的数据备份还原到2008上, 在备份2000时,一定注意要备份成一个文件,就是目标那里只添加一个就好,(否则待会还原数据库时要添加这两个文件,要不就报“备份了几个簇,只提供 ...
- String详解说明
大家平时都string都不是很在意,但是每当面试碰到String的时候在“==”和equals之间就乱了,下面我来说一说String,也许不够全面,请大家多多指教,希望会帮到处于蒙圈状态的人们. 一. ...
- ThinkPHP - 缓存使用
用法: 需要使用不同的缓存方式的时候 需要重新初始化,如果不初始化直接调用的话,则会按照系统配置自动初始化.初始化的返回值,可以直接操作缓存: $cache = cache(array('type'= ...
- linux命令sysctl使用
以前没有注意过这个命令,直到有次在单位安装greenplum的时候,在没有配置系统参数的情况下,出现了设备空间不足的报错信息. 当然,安装的不是我的本机,而是公用的服务器,编辑修改系统参数后,仍然出现 ...
- 安装uwsgi
apt-get install uwsgi uwsgi-plugin-python
- python成长之路——第四天
内置函数: callable:查看对象是否能被调用(对象是函数的话能被调用) #callable def f1(): pass f2="a" print(callable(f1)) ...
- CodeForces 519B A and B and Compilation Errors【模拟】
题目意思还是蛮简单的,看 输入数据输出数据还是比较明显的 我用排序来写还是可以AC的 //#pragma comment(linker, "/STACK:16777216") // ...
- UIScrollView方法 属性详解
--前言:UIScrollView使用非常广,本文研究UIScrollView各属性和方法,明白它们的意义.作用.在后面的一篇文章有整理UIScrollView一些常见用法以及一些效果的实现思路. - ...
- Global文件(修正篇)
什么是Global文件 Global.asax文件俗称为一个类,继承于Httpapplication类.位于应用程序根目录下.也可称为应用程序文件. 概述: Global文件是可选的,一般在创建应用程 ...
- iframe,window,滚动栏的一些问题
1.Iframe不显示边框:frameborder=0 2.Iframe不显示横向滚动栏:在iframe所指向的页面增加: <style> html{overflow-x:hidden;} ...