LevelDB 设计模式 Iterator模式
2015-10-09 10:27
381 查看
LevelDB 设计模式 Iterator模式
flyfish 2015-10-9
Iterator模式(迭代器) 对象行为型模式
意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.
适用性
1 访问一个聚合对象的内容而无需暴露它的内部表示.
2 支持对聚合对象的多种遍历
3 为遍历不同的聚合结构提供一个统一的接口(支持多态迭代).
参与者
1 Iterator(迭代器) 迭代器定义访问和遍历元素的接口.
2 ConcreteIterator(具体迭代器) 具体迭代器实现迭代器接口. 对该聚合遍历时跟踪当前位置.
3 Aggregate(聚合) 聚合定义创建相应迭代器对象的接口.
4 ConcreteAggregate(具体聚合) 具体聚合实现创建相应迭代器的接口, 该操作返回ConcreteIterator的一个适当的实例.
引用自《设计模式 可复用面向对象软件的基础》
LevelDB
Iterator(迭代器)
ConcreteIterator(具体迭代器)
ConcreteAggregate(具体聚合)
flyfish 2015-10-9
Iterator模式(迭代器) 对象行为型模式
意图 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.
适用性
1 访问一个聚合对象的内容而无需暴露它的内部表示.
2 支持对聚合对象的多种遍历
3 为遍历不同的聚合结构提供一个统一的接口(支持多态迭代).
参与者
1 Iterator(迭代器) 迭代器定义访问和遍历元素的接口.
2 ConcreteIterator(具体迭代器) 具体迭代器实现迭代器接口. 对该聚合遍历时跟踪当前位置.
3 Aggregate(聚合) 聚合定义创建相应迭代器对象的接口.
4 ConcreteAggregate(具体聚合) 具体聚合实现创建相应迭代器的接口, 该操作返回ConcreteIterator的一个适当的实例.
引用自《设计模式 可复用面向对象软件的基础》
LevelDB
Iterator(迭代器)
class Iterator { public: Iterator(); virtual ~Iterator(); virtual bool Valid() const = 0; virtual void SeekToFirst() = 0; virtual void SeekToLast() = 0; virtual void Seek(const Slice& target) = 0; virtual void Next() = 0; virtual void Prev() = 0; virtual Slice key() const = 0; virtual Slice value() const = 0; virtual Status status() const = 0; typedef void (*CleanupFunction)(void* arg1, void* arg2); void RegisterCleanup(CleanupFunction function, void* arg1, void* arg2); private: struct Cleanup { CleanupFunction function; void* arg1; void* arg2; Cleanup* next; }; Cleanup cleanup_; // No copying allowed Iterator(const Iterator&); void operator=(const Iterator&); }; // Return an empty iterator (yields nothing). extern Iterator* NewEmptyIterator(); // Return an empty iterator with the specified status. extern Iterator* NewErrorIterator(const Status& status);
ConcreteIterator(具体迭代器)
class EmptyIterator : public Iterator class MemTableIterator: public Iterator class MergingIterator : public Iterator class TwoLevelIterator: public Iterator class DBIter: public Iterator class Block::Iter : public Iterator class Version::LevelFileNumIterator : public Iterator
ConcreteAggregate(具体聚合)
//Block class Block { public: Iterator* NewIterator(const Comparator* comparator); }; Iterator* Block::NewIterator(const Comparator* cmp) { if (size_ < 2*sizeof(uint32_t)) { return NewErrorIterator(Status::Corruption("bad block contents")); } const uint32_t num_restarts = NumRestarts(); if (num_restarts == 0) { return NewEmptyIterator(); } else { return new Iter(cmp, data_, restart_offset_, num_restarts); } } } //MemTable class MemTable { public: Iterator* NewIterator(); }; Iterator* MemTable::NewIterator() { return new MemTableIterator(&table_); }
相关文章推荐
- 使方块运动的程序脚本的使用与说明&相机跟随目标物体
- Android菜鸟的成长笔记——第一个Activity 和 ADB
- JAXB生成XML不需要加@XmlRootElement注解的方法
- JSONObject
- REFrostedViewController侧滑菜单的实现
- MAC自动备份数据到服务器
- RestSharp .net 轻量级rest客户端
- overflow
- java题目
- +與array_merge合併數組的區別
- fatal io error 11错误
- [每天学一点Linux系列]Linux基本概念
- 9月国内操作系统市场份额:Win 7冠军 份额首破50%
- 创建交货单/外向交货BAPI_OUTB_DELIVERY_CREATE_SLS/STO
- PSR-4 Autoloader 自动加载(中文版)
- mysql使用left join等表连接查询时需注意的情况
- 第二章 实现复杂的数据结构
- 乘法口诀表
- javaScript中各种数据类型的转换总结
- 利用RDFLib的SPARQL进行查询的一个例子