迭代器与组合模式(含源码)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件构造第4次实验

实验报告

班级:

学号:

姓名:

2016年4月13日

一.设计

1.本次实验内容是用迭代器与组合模式来管理一个大公司。在迭代

器与组合模式中,迭代器提供一个方式来遍历集合而无需暴露集合的实现(实验中通过printPerson()方法打印公司的全部员工);通过组合,客户可以将对象的集合以及个别的对象一视同仁(实验中通过printMale()方法来打印所有的男工作者)。

2.迭代器将遍历聚合的工作封装进一个对象中,当使用迭代器的时

候,我们依赖聚合提供遍历;迭代器提供了一个通用的接口Iterator,使得我们在遍历聚合的项时可以实现多态。

3.组合模式提供了一个可以同时包容个别对象和组合对象的结构,

允许客户对个别对象以及组合对象一视同仁;在组合结构内的任意对象称为组件,组件可以是组合,也可以是叶节点。

二.实现

pany

import java.util.ArrayList;

import java.util.Iterator;

/**

* 对应Menu

* @author Yilia

*

*/

public class Company extends Component{

ArrayList components = new ArrayList();

String name;

// Iterator iterator = null;

public Company(String name){

= name;

}

public void add(Component menuComponent){ components.add(menuComponent);

}

public void remove(Component menuComponent){ components.remove(menuComponent);

}

public Component getChild(int i){

return (Component)components.get(i);

}

public String getName(){

return name;

}

public void print(){

for(int i = 0; i < deepth; i++){

System.out.print("---");

}

System.out.println(getName());

Iterator iterator = components.iterator();

deepth++;

while(iterator.hasNext()){

Component menuComponent = (Component)iterator.next();

menuComponent.print();

}

//System.out.println();

deepth--;

}

public Iterator createIterator(){

// if(iterator == null){

return new CompositeIterator(components.iterator()); // }

// return iterator;

}

}

ponent

import java.util.Iterator;

/**

* MenuComponent对每个方法都提供默认实现

* @author Yilia

*

*/

public abstract class Component {

protected static int deepth = 0;

public void add(Component component){//新增组件

throw new UnsupportedOperationException();

}

public void//删除组件

throw new UnsupportedOperationException();

}

public Component getChild(int i){//取得公司组件

throw new UnsupportedOperationException();

}

public String getName(){

throw new UnsupportedOperationException();

}

public boolean isMale(){

throw new UnsupportedOperationException();

}

public void print(){

throw new UnsupportedOperationException();

}

public abstract Iterator createIterator();

}

positeIterator

import java.util.Stack;

import java.util.Iterator;

public class CompositeIterator implements Iterator{ Stack stack = new Stack();

public CompositeIterator(Iterator iterator){

stack.push(iterator);

}

public Object next(){

if(hasNext()){

Iterator iterator = (Iterator)stack.peek();

Component component = (Component)iterator.next();

if(component instanceof Company){

stack.push(component.createIterator());

}

return component;

}else{

return null;

}

}

public boolean hasNext(){

if(stack.empty()){

return false;

}else{

Iterator iterator = (Iterator)stack.peek();

if(!iterator.hasNext()){

stack.pop();

return hasNext();

}else{

return true;

相关文档
最新文档