设计模式----迭代器模式例题

    吼吼吼最近看到了一本《大话设计模式》,是真滴连我这种智商都能看懂(略懂)!然后激起了我学习的动力!  然后我要光速学习一些东西准备做大作业了!因为设计模式快结课了有些人只是水了好几周的网课啥也没学会。。

                                                                              

    好的今天先看一下迭代器模式!

    这是迭代器模式的结构图:

                           

    我们来实现一个遍历提醒小动物买票的实例!画个类图:

                                   

然后是java实现:

(1)Iterator(抽象迭代器类):


public abstract class Iterator {
	//得到开始对象
	public abstract Object First();
	//得到下一个对象
	public abstract Object Next();
	//判断是否到达末尾
	public abstract boolean IsDone();
	//得到当前对象
	public abstract Object CurrentItem();
}

(2)Aggregate(抽象聚集类):


public abstract class Aggregate {
	//创建迭代器的函数
	public abstract Iterator CreatIterator();
}

(3)ConcreteIterator(具体迭代器类):


public class ConcreteIterator extends Iterator {
	//迭代器里有一个聚集对象
	private ConcreteAggregate aggregate;
	private int current = 0;
	
	public ConcreteIterator(ConcreteAggregate c) {
		this.aggregate = c;
	}

	@Override
	public Object First() {
		return aggregate.get(0);
	}

	@Override
	public Object Next() {
		//返回下一个对象,如果已经是最后一个则返回空值
		current += 1;
		if(current < aggregate.Count())
			return aggregate.get(current);
		return null;
	}

	@Override
	public boolean IsDone() {
		return current >= aggregate.Count() ? true:false;
	}

	@Override
	public Object CurrentItem() {
		return aggregate.get(current);
	}
}

(4)ConcreteAggregate(具体聚集类):

import java.util.ArrayList;

public class ConcreteAggregate extends Aggregate{
	private ArrayList items = new ArrayList();
	@Override
	public Iterator CreatIterator() {
		return new ConcreteIterator(this);
	}
	public int Count() {
		return items.size();
	}
	public Object get(int x) {
		return items.get(x);
	}
	public void add(Object o) {
		this.items.add(o);
	}

}

 (5)client类:


public class client {

	public static void main(String[] args) {
		ConcreteAggregate a = new ConcreteAggregate();
		
		a.add("小狗");
		a.add("小猫");
		a.add("小兔子");
		a.add("小狐狸");
		a.add("小猴子");
		a.add("小青蛙");
		
		Iterator i = new ConcreteIterator(a);
		Object item = i.First();
		while(!i.IsDone()){
			System.out.println(i.CurrentItem()+"请买票!");
			i.Next();
		}
	}

}

好滴!明天再写仲裁者模式!!!(我一定会写的!嗯!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值