TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 610 subscribers
Post #84 118
#design_patterns
دیزاین پترن 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();
$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";
}

Result:
Item 0: Item 1
Item 1: Item 2
Item 2: Item 3

در این مثال، با استفاده از دیزاین پترن Iterator، یک Iterator به نام MyListIterator ایجاد کردیم که اجازه دسترسی به اشیاء لیست MyList را به ترتیب فراهم می‌آورد. این الگو باعث از دست رفتن وابستگی‌های زیرکلاس‌ها به لیست و مرتب‌سازی اشیاء می‌شود و اجازه دسترسی مستقل و ترتیب‌دار به عناصر لیست را فراهم می‌کند.
.
  • 🔥 2
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →