设计模式—迭代器模式(十六)

        软件领域中的设计模式的重要性不言而喻。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态。虽然知道这些特性的定义但是并没有做到真正的理解,这样特性有什么作用?用于什么场合中等等问题,带着疑问开始学习设计模式,主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。

        迭代器模式:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。

        迭代器模式现在已经包含在语言中了,例如C++中的for_eachJava中的foreach in

        为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。


#include<iostream>
#include<vector>
using namespace std;
class MyIterator{
public:
	MyIterator(){};
	virtual ~MyIterator(){};
	virtual int First()=0;       // 返回集合第一个元素
	virtual int Next()=0;        // 返回集合下一个
	virtual bool IsDone()=0;     // 判断当前是不是集合尾部
	virtual int CurrentItem()=0; // 返回集合当前元素
};

class Aggregate{
public:
	virtual MyIterator* CreatIterator()=0;//创建一个迭代器
};
class ConcreteAggregate :public Aggregate
{
private:
	vector<int> item;
	MyIterator* p_Iterator;
public:
	ConcreteAggregate() : p_Iterator(nullptr){}
	MyIterator* CreatIterator();
	int Count()
	{
		return item.size();
	}
	void Set(int value)
	{
		item.push_back(value);
	}
	int Get(int index)
	{
		return item[index];
	}
};
class ConcreteIterator :public MyIterator
{
private:
	ConcreteAggregate *aggregate;
	int current = 0;
public:
	ConcreteIterator(){};
	~ConcreteIterator(){};
	ConcreteIterator(ConcreteAggregate* aggregate)
	{
		this->aggregate = aggregate;
	}
	int First() override
	{
		return aggregate->Get(0);
	}
	int Next() override
	{
		int temp=0;
		current++;
		if (current < aggregate->Count())
		{
			temp=aggregate->Get(current);
		}
		return temp;
	}
	bool IsDone() override
	{
		if (current >= aggregate->Count())
			return true;
		else
			return false;
	}
	int CurrentItem() override
	{
		return aggregate->Get(current);
	}
};

MyIterator* ConcreteAggregate::CreatIterator()
{
	p_Iterator= new ConcreteIterator(this);
	return p_Iterator;
}
int main()
{
	ConcreteAggregate* a = new ConcreteAggregate();
	a->Set(0);
	a->Set(1);
	a->Set(2);
	a->Set(3);
	a->Set(4);
	MyIterator* p_iter = a->CreatIterator();
	int temp = p_iter->First();
	cout << temp << endl;;
	cout << a->Count() << endl;
	cout << "遍历" << endl;
	while (!p_iter->IsDone())
	{
		cout << p_iter->CurrentItem() << endl;
		p_iter->Next();
	}
	delete a;
	delete p_iter;
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值