From 16faa3a38671c4594502edf299854d8d2ba2f029 Mon Sep 17 00:00:00 2001 From: FengJungle Date: Sun, 3 Nov 2019 14:20:17 +0800 Subject: [PATCH] add Iterator Pattern --- .../2.Code/InterpreterPattern.h | 6 +- .../1.Picture/迭代器模式UML图.png | Bin 0 -> 10154 bytes .../1.Picture/迭代器模式实例UML图.png | Bin 0 -> 17099 bytes 17.IteratorPattern/2.Code/Aggregate.cpp | 21 ++++++ 17.IteratorPattern/2.Code/Aggregate.h | 34 +++++++++ 17.IteratorPattern/2.Code/Iterator.h | 69 ++++++++++++++++++ 17.IteratorPattern/2.Code/main.cpp | 35 +++++++++ README.md | 6 +- 8 files changed, 167 insertions(+), 4 deletions(-) create mode 100644 17.IteratorPattern/1.Picture/迭代器模式UML图.png create mode 100644 17.IteratorPattern/1.Picture/迭代器模式实例UML图.png create mode 100644 17.IteratorPattern/2.Code/Aggregate.cpp create mode 100644 17.IteratorPattern/2.Code/Aggregate.h create mode 100644 17.IteratorPattern/2.Code/Iterator.h create mode 100644 17.IteratorPattern/2.Code/main.cpp diff --git a/16.InterpreterPattern/2.Code/InterpreterPattern.h b/16.InterpreterPattern/2.Code/InterpreterPattern.h index dd008ae..744b8d7 100644 --- a/16.InterpreterPattern/2.Code/InterpreterPattern.h +++ b/16.InterpreterPattern/2.Code/InterpreterPattern.h @@ -1,5 +1,5 @@ -#ifndef __COMMAND_PATTERN_H__ -#define __COMMAND_PATTERN_H__ +#ifndef __INTERPRETOR_PATTERN_H__ +#define __INTERPRETOR_PATTERN_H__ #include using namespace std; @@ -126,4 +126,4 @@ private: }; -#endif //__COMMAND_PATTERN_H__ \ No newline at end of file +#endif //__INTERPRETOR_PATTERN_H__ \ No newline at end of file diff --git a/17.IteratorPattern/1.Picture/迭代器模式UML图.png b/17.IteratorPattern/1.Picture/迭代器模式UML图.png new file mode 100644 index 0000000000000000000000000000000000000000..fc134bcba924a2acde30cae971f61afa34261214 GIT binary patch literal 10154 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 literal 0 HcmV?d00001 diff --git a/17.IteratorPattern/1.Picture/迭代器模式实例UML图.png b/17.IteratorPattern/1.Picture/迭代器模式实例UML图.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb7c5cd782e3d0d5fbdb4d0201ad37e0073b0d9 GIT binary patch literal 17099 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 Ku}E0w+y4ODG|q(p literal 0 HcmV?d00001 diff --git a/17.IteratorPattern/2.Code/Aggregate.cpp b/17.IteratorPattern/2.Code/Aggregate.cpp new file mode 100644 index 0000000..4fc5702 --- /dev/null +++ b/17.IteratorPattern/2.Code/Aggregate.cpp @@ -0,0 +1,21 @@ +#include "Iterator.h" + +Television::Television(){} + +Television::Television(vector iChannelList){ + this->channelList = iChannelList; +} + +Iterator* Television::createIterator(){ + RemoteControl *it = new RemoteControl(); + it->setTV(this); + return (Iterator*)it; +} + +int Television::getTotalChannelNum(){ + return channelList.size(); +} + +void Television::play(int i){ + printf("ڲţ%s\n", channelList[i].c_str()); +} \ No newline at end of file diff --git a/17.IteratorPattern/2.Code/Aggregate.h b/17.IteratorPattern/2.Code/Aggregate.h new file mode 100644 index 0000000..ac3f81f --- /dev/null +++ b/17.IteratorPattern/2.Code/Aggregate.h @@ -0,0 +1,34 @@ +#ifndef __AGGREGATE_H__ +#define __AGGREGATE_H__ + +#include +using namespace std; + +// ǰΪ໥ +class Iterator; +class RemoteControl; + +// ۺ Aggregate +class Aggregate +{ +public: + Aggregate(){} + virtual Iterator* createIterator() = 0; +}; + +// ۺ Television +class Television :public Aggregate +{ +public: + Television(); + Television(vector iChannelList); + // ʵִ + Iterator* createIterator(); + // ȡܵƵĿ + int getTotalChannelNum(); + void play(int i); +private: + vector channelList; +}; + +#endif //__AGGREGATE_H__ \ No newline at end of file diff --git a/17.IteratorPattern/2.Code/Iterator.h b/17.IteratorPattern/2.Code/Iterator.h new file mode 100644 index 0000000..b4e29bb --- /dev/null +++ b/17.IteratorPattern/2.Code/Iterator.h @@ -0,0 +1,69 @@ +#ifndef _ITERATOR_H_ +#define _ITERATOR_H_ + +#pragma once +#include "Aggregate.h" + +#include +using namespace std; + +// +class Iterator +{ +public: + Iterator(){} + // + virtual void first() = 0; + virtual void last() = 0; + virtual void next() = 0; + virtual void previous() = 0; + virtual bool hasNext() = 0; + virtual bool hasPrevious() = 0; + virtual void currentChannel() = 0; +private: + +}; + +// ң +class RemoteControl :public Iterator +{ +public: + RemoteControl(){} + void setTV(Television *iTv){ + this->tv = iTv; + cursor = -1; + totalNum = tv->getTotalChannelNum(); + } + // ʵָ + void first(){ + cursor = 0; + } + void last(){ + cursor = totalNum - 1; + } + void next(){ + cursor++; + } + void previous(){ + cursor--; + } + bool hasNext(){ + return !(cursor == totalNum); + } + bool hasPrevious(){ + return !(cursor == -1); + } + void currentChannel(){ + tv->play(cursor); + } +private: + // α + int cursor; + // ܵƵĿ + int totalNum; + // + Television* tv; +}; + + +#endif \ No newline at end of file diff --git a/17.IteratorPattern/2.Code/main.cpp b/17.IteratorPattern/2.Code/main.cpp new file mode 100644 index 0000000..b91d5b3 --- /dev/null +++ b/17.IteratorPattern/2.Code/main.cpp @@ -0,0 +1,35 @@ +#include +#include "Iterator.h" + +int main() +{ + vector channelList = { "Ƶ", "ƾƵ", "Ƶ", "ӰƵ", "Ƶ", "ũҵƵ", "Ĵ", "ɶ" }; + // + Television *tv = new Television(channelList); + // ң + Iterator *remoteControl = tv->createIterator(); + + // ˳ + printf("˳:\n"); + remoteControl->first(); + // Ƶ + while (remoteControl->hasNext()){ + remoteControl->currentChannel(); + remoteControl->next(); + } + + printf("\n\n"); + + // + printf(":\n"); + remoteControl->last(); + // Ƶ + while (remoteControl->hasPrevious()){ + remoteControl->currentChannel(); + remoteControl->previous(); + } + + printf("\n\n"); + system("pause"); + return 0; +} \ No newline at end of file diff --git a/README.md b/README.md index 12adce3..08ce255 100644 --- a/README.md +++ b/README.md @@ -77,4 +77,8 @@ Jungle设计模式系列 19.设计模式(十九)——解释器模式 -博客地址:https://blog.csdn.net/sinat_21107433/article/details/102864850 \ No newline at end of file +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102864850 + +20.设计模式(二十)——迭代器模式 + +博客地址:https://blog.csdn.net/sinat_21107433/article/details/102879383 \ No newline at end of file