12 Ekim 2015 Pazartesi

GoF - Iterator Örüntüsü

Iterator - Davranışsal Örüntü
Iterator ve Visitor birbirlerine zıt tasarım örüntüleri. Iterator pull,Visitor ise push modunda çalışıyor diye düşünülebilir.
"The iterator pattern provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation"
Veri Yapısını Döndürmek
Iterator tasarım örüntüsü, veri yapımızın kendisi veya kalıttığı arayüzü (örneğin IList) döndüren bir metod yerine iterator döndüren metodlar kullanmayı öneriyor. IList döndürent metodlar Java dünyasında çok yaygın. C# dünyasında ise IEnumerator döndüren metodlar biraz daha yaygın.

Iterator döndürmek istersek çeşitli programla dillerinde kullanılan örnekler şöyle:

Java
Iterator Arayüzü ile sağlanıyor.

C#
IEnumerable Arayüzü ile sağlanıyor.

C++
Veri yapımızın iterator tipini typedef veya using ile dış dünyaya açarız. begin(),end() ve bunların const türevlerini gerçekleştiren metodlar sunarız.
Örnek
class AddressBook
{
  using peoples_t = std::vector<People>;
public:
  using iterator = peoples_t::iterator;
  using const_iterator = peoples_t::const_iterator;

  AddressBook();

  iterator begin() { return people.begin(); }
  iterator end() { return people.end(); }
  const_iterator begin() const { return people.begin(); }
  const_iterator end() const { return people.end(); }
  const_iterator cbegin() const { return people.cbegin(); }
  const_iterator cend() const { return people.cend(); }

private:
  peoples_t people;
};


Hiç yorum yok:

Yorum Gönder