1 / 17

Design Patterns in C#

Iterator Pattern. Design Patterns in C#. www.devbg.org/patterns course /. Виктор Живков. Интерконсулт България. www.icb.bg. Съдържание. Цел на шаблона Проблем, който той решава Решение Следствия от употребата Имплементация Свързани шаблони Подобни шаблони. За шаблона.

Télécharger la présentation

Design Patterns in C#

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Iterator Pattern Design Patterns in C# www.devbg.org/patternscourse/ Виктор Живков Интерконсулт България www.icb.bg

  2. Съдържание • Цел на шаблона • Проблем, който той решава • Решение • Следствия от употребата • Имплементация • Свързани шаблони • Подобни шаблони

  3. За шаблона • Предоставя начин за достъп до елементите на сложен обект, без да разкрива същинското му представяне • Дава възможност за множество видове обхождания на дадена структура от данни • Унифициран интерфейс за обхождане на различни структури от данни

  4. Проблем • Обхождане само на определени елементи от списък (колекция) • Обхождане на обекти с връзка баща-син • Капсулиране на алгоритъма за обхождане • Лесна смяна на алгоритъма за обхождане

  5. Структура

  6. Роля на класовете • Iterator – дефинира интерфейс за достигане и обхождане на елементите • ConcreteIterator • Имплементира интерфейса на Iterator • Следи текущата позиция при обхождането на структурата от данни • Aggregate – дефинира интерфейс за създаване на обект Iterator • ConcreteAggregate – имплементира интерфейса за създаване на Iterator, който връща инстанция на съответния клас ConcreteIterator

  7. Взаимодействие между класовете • Чрез ConcreteAggregate създаваме подходящ итератор (ConcreteIterator) • ConcreteIterator инстанцията следи за текущия елемент и може да изчислява следващия при обхождане

  8. Имплементация Базовият Iterator: public interface IIterator { bool MoveNext(); object Current { get; } void Reset(); }

  9. Имплементация ConcreteIterator клас: public class SimpleIterator : IIterator { object[] list; int currentIndex; public SimpleIterator(object[] values) {list = values; currentIndex = -1; } public bool MoveNext() { if (currentIndex < list.Length - 1) {currentIndex++; return true;} return false; } public object Current { get { if(currentIndex>-1 && currentIndex<list.Length) return list[currentIndex]; throw new ArgumentOutOfRangeException();} } public void Reset() { currentIndex = 0;} }

  10. Имплементация ConcreteAggregator клас: public interface IIteratible { IIterator GetIterator(); } public class ConcreteAggregator : IIteratible { object[] list; public ConcreteAggregator(object[] values) { list = values; } public IIterator GetIterator() { GetIterator(iteratorType); } }

  11. Демонстрация • Обхождане на масив по няколко различни начина

  12. Препоръки • Имплементирайте IEnumerableза всяка ваша колекция • Използвайте интерфейси • Използвайте интерфейсите дефинирани в .NET Framework • Преценете дали да връщате nullили да хвърляте изключение, когато се опитате да достъпите невалиден елемент/индекс

  13. Следствия • Поддържаме различни варианти за обхождане на дадена структура от данни • Опростяване на интерфейса на Aggregate • В даден момент можем да имаме повече от едно активно обхождане за дадена структура • Трудно можете да редактирате колекцията

  14. Свързани шаблони • Composite – итераторите често се прилагат върху рекурсивни структури като композиции • Method Factory – използват се при полиморфичните итератори за създаване на нужния тип итератор • Memento – използва се за запазване на състоянието на итератора във вътрешна променлива

  15. Упражнения • Запознайте се обстойно с имплементацията на IEnumerator и IEnumerable в .NET Framework. • Създайте итератор, който да ви позволява да обхождате обекти в масив, които са само от предварително зададен тип. Всички останали обекти да бъдат пропускани. • Реализирайте търсене на път между две клетки в матрица посредством шаблона итератор.

  16. Design Patterns in C# Въпроси? www.devbg.org/patternscourse/

  17. Използвана литература • Ерик Гама, Ричард Хелм, Ралф Джонсън, Джон Влисидес, Шаблони за дизайн, СофтПрес, 2005, ISBN 954-685-352-6

More Related