TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 610 subscribers
Post #76 149
#design_patterns
دیزاین پترن Strategy یکی از دیزاین پترن های رایج معماری نرم‌افزاری است که در آن یک خانواده از الگوریتم‌ها یا روش‌های مختلف ارائه می‌شود و این امکان را به کاربر می‌دهد که در زمان اجرای برنامه، یکی از این الگوریتم‌ها را انتخاب کند و از آن استفاده کند.

فرض کنید که شما یک برنامه برای محاسبه قیمت نهایی محصولات در یک فروشگاه آنلاین طراحی می‌کنید. قیمت نهایی هر محصول بسته به شرایط مختلف می‌تواند به روش‌های مختلفی محاسبه شود. مثلاً برخی از محصولات ممکن است با تخفیف‌های ویژه‌ای به فروش برسند، برخی دیگر با توجه به نوع مشتری (حقیقی یا حقوقی) با قیمت متفاوت عرضه شوند و برخی ممکن است به صورت ثابت به فروش برسند.

مثال:

ابتدا یک اینترفیس برای استراتژی‌ها تعریف می‌کنیم که متد محاسبه قیمت نهایی محصول را دارد.
interface PricingStrategy {
public function calculateFinalPrice(float $price): float;
}


سپس برای هر روش محاسبه قیمت نهایی محصول، یک کلاس را پیاده‌سازی می‌کنیم که از این اینترفیس ارث‌بری کند و متد محاسبه قیمت را به شکل متناسب با الگوریتم‌های خود پیاده‌سازی کند.
class RegularPricingStrategy implements PricingStrategy {
public function calculateFinalPrice(float $price): float {
return $price;
}
}

class DiscountPricingStrategy implements PricingStrategy {
private $discountPercentage;

public function __construct(float $discountPercentage) {
$this->discountPercentage = $discountPercentage;
}

public function calculateFinalPrice(float $price): float {
$discountAmount = $price * ($this->discountPercentage / 100);
return $price - $discountAmount;
}
}

class SpecialCustomerPricingStrategy implements PricingStrategy {
private $specialPrice;

public function __construct(float $specialPrice) {
$this->specialPrice = $specialPrice;
}

public function calculateFinalPrice(float $price): float {
return $this->specialPrice;
}
}

حالا می‌توانیم در برنامه‌ی خود از دیزاین پترن استراتژی استفاده کنیم و به راحتی یکی از روش‌های محاسبه قیمت را برای هر محصول انتخاب کنیم.
$strategy = new SpecialCustomerPricingStrategy(10);

$price = 100;
$finalPrice = $strategy->calculateFinalPrice($price);

echo "Final Price: $finalPrice";

Result:
Final Price: 90

در این مثال، از دیزاین پترن Strategy برای جداسازی الگوریتم‌های مختلف محاسبه قیمت نهایی محصول استفاده کردیم. با استفاده از این الگو، می‌توانیم به راحتی یکی از روش‌های مختلف محاسبه قیمت را انتخاب کنیم و از آن استفاده کنیم، بدون اینکه نیاز به تغییر در کد برنامه‌ی خود داشته باشیم. همچنین، با اضافه کردن استراتژی‌های جدید، می‌توانیم به سادگی قابلیت‌های جدید به برنامه‌ی خود اضافه کنیم بدون تغییر در کد موجود.
.
  • ❤ 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 →