zoukankan      html  css  js  c++  java
  • 设计模式:Iterator模式

    目的:将数据的存储和数据的查询分开,降低数据的耦合性

    继承关系图:

    例子:

    //定义迭代器接口
    template<typename T>
    class Iterator
    {
    public:
    	virtual bool hasNext() = 0;
    	virtual T next() = 0;
    };
    //定义集合的接口
    template<typename T> 
    class Aggregate
    {
    public:
    	virtual Iterator<T>* createIterator() = 0;
    	virtual T getItem(int index) = 0;
    	virtual int getSize() = 0;
    	virtual void setItem(T t) = 0;
    };
    //迭代器的具体实现类
    template<typename T>
    class IteratorImp: public Iterator<T>
    {
    	Aggregate<T>* p;
    	int index;
    public:
    	IteratorImp(Aggregate<T>* aggregate)
    	{
    		p = aggregate;
    		index = 0;
    	}
    	
    	bool hasNext()
    	{
    		if(index < p->getSize())
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    	
    	T next()
    	{
    		return p->getItem(index++);
    	}
    };
    //集合的具体实现类
    template<typename T>
    class AggregateImp: public Aggregate<T>
    {
    	vector<T> data;
    public:
    	Iterator<T>* createIterator()        //这一步是关键,将迭代器和集合挂钩
    	{                                    //根据集合初始化迭代器并返回迭代器
    		return new IteratorImp<T>(this);
    	}
    	
    	T getItem(int index)
    	{
    		return data[index];
    	}
    	
    	int getSize()
    	{
    		return data.size();
    	}
    	
    	void setItem(T t)
    	{
    		data.push_back(t);
    	}
    };
    
    int main() 
    {
    	Aggregate<int>* d = new AggregateImp<int>();
    	Iterator<int>* iterator = d->createIterator();
    	
    	d->setItem(1);
    	d->setItem(3);
    	d->setItem(4);
    	d->setItem(2);
    
    	while(iterator->hasNext())
    	{
    		cout << iterator->next() <<endl;
    	}
    	
    	return 0;
    }

      

  • 相关阅读:
    整合规则引擎urule
    vue学习
    发送put请求,get请求
    jpa自定义字段
    spring的3种配置方式
    netty
    springsercurity和shiro
    git报错
    Scrapy全站数据爬取
    python操作Excel模块openpyxl
  • 原文地址:https://www.cnblogs.com/chusiyong/p/11431340.html
Copyright © 2011-2022 走看看