TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 610 subscribers
Post #83 105
#design_patterns
دیزاین پترن Template Method یکی از الگوهای رفتاری است که در طراحی نرم‌افزارها مورد استفاده قرار می‌گیرد. این الگو به شما امکان می‌دهد یک چارچوب اصلی برای یک الگوریتم تعریف کنید که بخش‌هایی از آن را به کلاس‌های زیرمجموعه خود می‌سپارید تا به صورت مستقل اجرا شوند. با این روش، تغییرات در الگوریتم اصلی به کلاس‌های زیرمجموعه انتقال پیدا نمی‌کند و همچنین از دسترسی به متدهای مشترک و ارتباط موثر با آن‌ها برخوردار خواهید بود.

فرض کنید که می‌خواهیم یک کلاس برای ساخت یک نوشیدنی دم‌نوش تعریف کنیم که از دو مرحله پیش‌تهیه (Prepare) و تهیه (Brew) تشکیل شده است. این کلاس باید اجازه دهد که بخش‌هایی از فرآیند دم‌نوش‌سازی توسط subclass ها (نمونه‌ها) اجرا شوند.

مثال:
ابتدا این کلاس یک الگوریتم اصلی برای ساخت نوشیدنی دم‌نوش ارائه می‌دهد که شامل مراحل Prepare و Brew است.
abstract class Beverage
{
public function makeBeverage()
{
$this->boilWater();
$this->brew();
$this->pourInCup();
$this->addCondiments();
}

public function boilWater()
{
echo "Boiling water...\n";
}

public function pourInCup()
{
echo "Pouring into cup...\n";
}

// Methods required by subclasses must be defined here
abstract public function brew();
abstract public function addCondiments();
}

سپس subclass ها با توجه به نوشیدنی موردنظر، متدهای brew و addCondiments را پیاده‌سازی می‌کنند.
class Tea extends Beverage
{
public function brew()
{
echo "Steeping the tea...\n";
}

public function addCondiments()
{
echo "Adding lemon...\n";
}
}

class Coffee extends Beverage
{
public function brew()
{
echo "Dripping coffee through filter...\n";
}

public function addCondiments()
{
echo "Adding sugar and milk...\n";
}
}

حالا می‌توانیم از کلاس‌ها و زیرکلاس‌های آن‌ها برای ساخت نوشیدنی دم‌نوش استفاده کنیم.
$tea = new Tea();
$tea->makeBeverage();

Result:
Boiling water...
Steeping the tea...
Pouring into cup...
Adding lemon...

$coffee = new Coffee();
$coffee->makeBeverage();

Result:
Boiling water...
Dripping coffee through filter...
Pouring into cup...
Adding sugar and milk...

در این مثال، با استفاده از دیزاین پترن Template Method، یک چارچوب اصلی برای ساخت نوشیدنی دم‌نوش با مراحل مشترک boilWater و pourInCup تعریف کردیم و بخش‌های خاص هر نوشیدنی را در subclass ها تعیین کردیم. این الگو باعث از دست رفتن تکرار کد، افزایش قابلیت توسعه و حفظ ساختار یکپارچه‌ای در کلاس‌ها می‌شود.
.
  • 🔥 1
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 →