网站关键词在哪里添加/如何做企业网页
迭代器模式:提供一种方法可以顺序访问一个聚合对象中各个元素,而又不需要暴露给该对象的内部表示。
场景:
1.一个聚合对象,如数组、list,应该提供一种方法来让别人可以访问他的元素,而又不需要暴露他的内部结构;
2.支持对聚合对象的多种遍历;
3.为遍历不同的聚合对象结构提供一个统一的接口。
迭代器模式主要实现了存储对象和读取遍历对象的分离。
#include <stdio.h>
#include <string>
#include <vector>struct Book {std::string bookName;int price;
};class ItemIterator {
public:virtual Book* first() = 0;virtual Book* next() = 0;virtual Book* end() = 0;virtual int hasSize() = 0;
};class Library;class BookIterator :public ItemIterator {
public:BookIterator(Book* books) {_books = books;}virtual Book* first() override {return _books;}virtual Book* next() override {if(_pos >= 5) {return nullptr;}return _books + (_pos++);}virtual Book* end() override {return _books + 4;}virtual int hasSize() {return 5;}
private:Book* _books;int _pos = 0;
};class Library {
public:virtual ItemIterator* createIterator() = 0;
};class MyLibrary:public Library {
public:ItemIterator* createIterator()override {return new BookIterator(_books);}void addBook(std::string bookName,int price) {Book* oneBook = new Book;oneBook->bookName = bookName;oneBook->price = price;_books[_pos] = *oneBook;_pos++;}
private:Book _books[5];int _pos = 0;
};int main() {MyLibrary* lib = new MyLibrary;lib->addBook("语文", 50);lib->addBook("数学", 55);lib->addBook("英语", 40);lib->addBook("政治", 56);lib->addBook("历史", 60);ItemIterator* it = lib->createIterator();for(int i = 0; i < it->hasSize();i++) {Book *aBook = it->next();printf("%s : %d\n", aBook->bookName.c_str(), aBook->price);}return 0;
}
运行结果: