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.
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
Iterator ve Visitor birbirlerine zıt tasarım örüntüleri. Iterator pull,Visitor ise push modunda çalışıyor diye düşünülebilir.
Veri Yapısını Döndürmek"The iterator pattern provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation"
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