دیزاین پترن
Iterator یکی از الگوهای رفتاری است که در طراحی نرمافزارها مورد استفاده قرار میگیرد. این الگو به شما امکان میدهد روشی را تعریف کنید تا از طریق آن بتوانید یک مجموعه از اشیاء را به ترتیبی مرتب کنید و به آنها به ترتیب دسترسی داشته باشید بدون اینکه نیاز به دستکاری یا اطلاع از ساختار داخلی مجموعه داشته باشید.فرض کنید که یک کلاس به نام MyList داریم که یک لیست از اشیاء را نمایش میدهد. برای دسترسی به عناصر لیست به صورت مرتب شده و به ترتیب، از الگوی طراحی
Iterator استفاده میکنیم.مثال:
این کلاس یک لیست از اشیاء را نگهداری میکند و اجازه دسترسی به اشیاء به ترتیب را از طریق
Iterator مرتبشده ارائه میدهد.class MyListIterator implements Iteratorحالا میتوانیم از کلاس
{
private $list;
private $index = 0;
public function __construct(MyList $list)
{
$this->list = $list;
}
public function rewind()
{
$this->index = 0;
}
public function valid()
{
return $this->index < count($this->list->getItems());
}
public function current()
{
return $this->list->getItems()[$this->index];
}
public function key()
{
return $this->index;
}
public function next()
{
$this->index++;
}
}
class MyList
{
private $items = [];
public function addItem($item)
{
$this->items[] = $item;
}
public function getItems()
{
return $this->items;
}
public function getIterator()
{
return new MyListIterator($this);
}
}
MyList برای دسترسی به اشیاء به ترتیب از طریق Iterator استفاده کنیم.$list = new MyList();Result:
$list->addItem('Item 1');
$list->addItem('Item 2');
$list->addItem('Item 3');
$iterator = $list->getIterator();
foreach ($iterator as $index => $item) {
echo "Item $index: $item\n";
}
Item 0: Item 1
Item 1: Item 2
Item 2: Item 3
در این مثال، با استفاده از دیزاین پترن
Iterator، یک Iterator به نام MyListIterator ایجاد کردیم که اجازه دسترسی به اشیاء لیست MyList را به ترتیب فراهم میآورد. این الگو باعث از دست رفتن وابستگیهای زیرکلاسها به لیست و مرتبسازی اشیاء میشود و اجازه دسترسی مستقل و ترتیبدار به عناصر لیست را فراهم میکند..