设计模式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 ...
随机推荐
- c++,public/protected/private权限修饰符
1.public的变量可以在类中以及外部访问到: 2. private只可以在类/友元中访问到. #include <iostream> using namespace std; //-- ...
- 在AD09中查找元件和封装
在AD09中查找元件和封装 Altium Designer 软件方法/步骤 Altium下Miscellaneous Devices.Intlib元件库中常用元件有: 电阻系列(res*)排组(res ...
- YII重点文件
yii\di\Containeryii\base\Componentyii\base\Objectyii\base\Configurableyii\web\Applicationyii\base\Ap ...
- excel列显示形式互换(字母与数字)
以office2007为例: excel选项>公式>使用公式下的'R1C1引用样式' 打上钩显示形式为数字,不打钩显示形式为字母
- POJ 1041 John's trip 无向图的【欧拉回路】路径输出
欧拉回路第一题TVT 本题的一个小技巧在于: [建立一个存放点与边关系的邻接矩阵] 1.先判断是否存在欧拉路径 无向图: 欧拉回路:连通 + 所有定点的度为偶数 欧拉路径:连通 + 除源点和终点外都为 ...
- Visual Studio 2015编译安装配置QT5.5.1(含QTWEBKIT)
尽管QT5.5.1和VisualStudio 2015都已经发布很久了,但是QT项目组视乎不会为QT5.5.1专门发布预编译的QT5.5.1 for windows(2015)版本的,也不会专门发布V ...
- VM添加e1000e驱动网卡
关闭虚拟机 打开VMware 虚拟机配置 (.vmx),如
- Mybatis3 框架理解
最近工作比较闲,维护一个政府机关的短信发送平台,大部分业务逻辑都在Oracle数据库上,但自己明明应聘的是Java开发啊!!!整天写存储过程的我还是有一颗写高级语言的心啊!!!好吧!!!先找个数据库方 ...
- BZOJ 4145: [AMPPZ2014]The Prices( 状压dp + 01背包 )
我自己只能想出O( n*3^m )的做法....肯定会T O( nm*2^m )做法: dp( x, s ) 表示考虑了前 x 个商店, 已买的东西的集合为s. 考虑转移 : 先假设我们到第x个商店去 ...
- 基于visual Studio2013解决C语言竞赛题之0805成绩输出
题目