From 04f4d5db843e4726a48c1cd90afa65c35e5f1ea4 Mon Sep 17 00:00:00 2001 From: Polina Salimullina <48998084+hinagawa@users.noreply.github.com> Date: Thu, 27 May 2021 12:35:23 +0300 Subject: [PATCH 1/3] Create iterator.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Реализация паттерна Итератор на typescript Итерируем коллекцию, выводим элементы --- iterator.ts | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 iterator.ts diff --git a/iterator.ts b/iterator.ts new file mode 100644 index 0000000..6bb3a0b --- /dev/null +++ b/iterator.ts @@ -0,0 +1,55 @@ + interface Iterator { // Определяет общий интерфейс для доступа и обхода элементов. + + next(): T; // получить следующий элемент + hasNext(): boolean; // есть ли следующий элемент +} + +interface Aggregator { // Определяет интерфейс фабрики создания объектов-итераторов. + createIterator(): Iterator; +} + +class ArrayIterator implements Iterator { + private collection: WordsArray; + private position: number = 0; + + + public next(): string { // Возвращаем следующий элемент + const item = this.collection.getItems()[this.position]; + this.position += 1; + return item; + } + + public hasNext(): boolean { // Проверяем есть ли следующий элемент + return this.collection.getItems()[this.position+1] ? true: false; + } + +} + +class WordsArray implements Aggregator { // Реализуем коллекцию + private items: string[] = []; + + + public addItem(item: string): void { // Добавить в коллекцию + this.items.push(item); + } + public getItems(): string[] { // Получить из коллекции + return this.items; + } + public createIterator(): Iterator { // Создать итератор + return new ArrayIterator(this); + } + +} + +const collection = new WordsArray(); // создаем экземпляр коллекции +collection.addItem('1'); +collection.addItem('2'); +collection.addItem('3'); +collection.addItem('4'); + +const iterator = collection.createIterator(); // создаем экземпляр итератора + +while (iterator.hasNext()) { // пока есть следующий элемент - выводим на экран + console.log(iterator.next()); +} + From 2ff18a0f338325ddd5a9a6b2c5767a29e1238fbf Mon Sep 17 00:00:00 2001 From: Polina Salimullina <48998084+hinagawa@users.noreply.github.com> Date: Wed, 2 Jun 2021 13:42:24 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B8=D1=82=D0=B5=D1=80=D0=B0=D1=82=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20TS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgregatorImpl.ts | 19 +++++++++++++++++++ IAgregator.ts | 7 +++++++ IIterator.ts | 4 ++++ IteratorImpl.ts | 17 +++++++++++++++++ main.ts | 14 ++++++++++++++ 5 files changed, 61 insertions(+) create mode 100644 AgregatorImpl.ts create mode 100644 IAgregator.ts create mode 100644 IIterator.ts create mode 100644 IteratorImpl.ts create mode 100644 main.ts diff --git a/AgregatorImpl.ts b/AgregatorImpl.ts new file mode 100644 index 0000000..0a682ac --- /dev/null +++ b/AgregatorImpl.ts @@ -0,0 +1,19 @@ + +import { IAgregator } from "./IAgregator"; +import { IIterator } from "./IIterator"; +import { IteratorImpl } from "./IteratorImpl"; + +//Реализуем наш "агрегатор" +export class AgregatorImpl implements IAgregator { + private items: any[] = []; + + public createIterator(): IIterator { // Вызываем итератор + return new IteratorImpl(this); + } + public addItem(item: any): void { // Добавляем элементы в коллекцию + this.items.push(item); + } + public getItem(): any[] { // Получаем элементы коллекции + return this.items; + } +} \ No newline at end of file diff --git a/IAgregator.ts b/IAgregator.ts new file mode 100644 index 0000000..489d605 --- /dev/null +++ b/IAgregator.ts @@ -0,0 +1,7 @@ +import { IIterator } from "./IIterator"; + +export interface IAgregator { // Собираем в интерфейс методы для создания коллекции + createIterator(): IIterator // Создать итератор + addItem(item): void; // Добавить элемент + getItem(item): void // Получить элемент +} \ No newline at end of file diff --git a/IIterator.ts b/IIterator.ts new file mode 100644 index 0000000..e3a8a82 --- /dev/null +++ b/IIterator.ts @@ -0,0 +1,4 @@ +export interface IIterator { // Определяет общий интерфейс для доступа и обхода элементов. + next(): T; // получить следующий элемент + hasNext(): boolean; // есть ли следующий элемент +} \ No newline at end of file diff --git a/IteratorImpl.ts b/IteratorImpl.ts new file mode 100644 index 0000000..6baf890 --- /dev/null +++ b/IteratorImpl.ts @@ -0,0 +1,17 @@ +import { IIterator } from "./IIterator"; +import { IAgregator } from "./IAgregator"; + +// Реализуем итератор +export class IteratorImpl implements IIterator { + private collection: IAgregator; + private key: number = 0; + constructor(collection: IAgregator) { // создаем коллекцию + this.collection = collection; + } + public next(): any { // Возвращаем следующий элемент + return this.collection.getItem(this.key++); + } + public hasNext(): boolean { // Проверяем наличие следующего элемента + return this.collection.getItem(this.key++) ? true : false; + } +} \ No newline at end of file diff --git a/main.ts b/main.ts new file mode 100644 index 0000000..c3e1b8c --- /dev/null +++ b/main.ts @@ -0,0 +1,14 @@ +import { AgregatorImpl } from "./AgregatorImpl"; + +const collection = new AgregatorImpl(); +//Добавляем в коллекцию +collection.addItem(false); // bool +collection.addItem('Sun'); // string +collection.addItem([4, 3, 5]); // array +collection.addItem(10); // number + +const iterator = collection.createIterator(); // Создаем итератор + +while (iterator.hasNext()) { // Пока есть следующий элемент печатаем его + console.log(iterator.next()); +} \ No newline at end of file From 51581eb359d2c345954b894716b9022718b8a891 Mon Sep 17 00:00:00 2001 From: Polina Salimullina <48998084+hinagawa@users.noreply.github.com> Date: Wed, 2 Jun 2021 13:43:45 +0300 Subject: [PATCH 3/3] Delete iterator.ts --- iterator.ts | 55 ----------------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100644 iterator.ts diff --git a/iterator.ts b/iterator.ts deleted file mode 100644 index 6bb3a0b..0000000 --- a/iterator.ts +++ /dev/null @@ -1,55 +0,0 @@ - interface Iterator { // Определяет общий интерфейс для доступа и обхода элементов. - - next(): T; // получить следующий элемент - hasNext(): boolean; // есть ли следующий элемент -} - -interface Aggregator { // Определяет интерфейс фабрики создания объектов-итераторов. - createIterator(): Iterator; -} - -class ArrayIterator implements Iterator { - private collection: WordsArray; - private position: number = 0; - - - public next(): string { // Возвращаем следующий элемент - const item = this.collection.getItems()[this.position]; - this.position += 1; - return item; - } - - public hasNext(): boolean { // Проверяем есть ли следующий элемент - return this.collection.getItems()[this.position+1] ? true: false; - } - -} - -class WordsArray implements Aggregator { // Реализуем коллекцию - private items: string[] = []; - - - public addItem(item: string): void { // Добавить в коллекцию - this.items.push(item); - } - public getItems(): string[] { // Получить из коллекции - return this.items; - } - public createIterator(): Iterator { // Создать итератор - return new ArrayIterator(this); - } - -} - -const collection = new WordsArray(); // создаем экземпляр коллекции -collection.addItem('1'); -collection.addItem('2'); -collection.addItem('3'); -collection.addItem('4'); - -const iterator = collection.createIterator(); // создаем экземпляр итератора - -while (iterator.hasNext()) { // пока есть следующий элемент - выводим на экран - console.log(iterator.next()); -} -