You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/chapter 9/behavioral patterns/9.3.8-strategy.md
+148-1Lines changed: 148 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,4 +3,151 @@ title: '9.3.8 الگو Strategy'
3
3
slug: go-strategy-pattern
4
4
weight: 176008
5
5
---
6
-
الگو Strategy...
6
+
7
+
## 9.3.8.1 - توضیح الگوی Strategy
8
+
9
+
الگوی Strategy یک الگوی طراحی رفتاری است که به شما امکان میدهد یک خانواده از الگوریتمها را تعریف کرده، هر یک را در یک کلاس جداگانه کپسوله کنید و آنها را قابل تعویض کنید. این الگو اجازه میدهد الگوریتمها مستقل از کلاینتهایی که از آنها استفاده میکنند، تغییر کنند. با استفاده از این الگو، میتوانید رفتار یک کلاس را در زمان اجرا بدون تغییر ساختار آن کلاس تغییر دهید. Strategy وابستگی بین کلاینت و الگوریتمها را از بین برده و اصل "Open/Closed" را رعایت میکند، به طوری که میتوانید استراتژیهای جدیدی اضافه کنید بدون اینکه کد موجود را تغییر دهید.
در این پیادهسازی الگوی Strategy، رابط PaymentStrategy به عنوان استراتژی پایه تعریف شده که متد Pay را شامل میشود. چهار استراتژی بتن CreditCardPayment، PayPalPayment، CryptoPayment و BankTransferPayment این رابط را پیادهسازی کرده و هر کدام منطق پرداخت خاص خود را ارائه میدهند. کلاس PaymentProcessor به عنوان Context عمل میکند که یک استراتژی پرداخت را نگهداری کرده و با متد SetStrategy امکان تغییر استراتژی در زمان اجرا را فراهم میکند. متد ProcessPayment در Context، کار را به استراتژی فعلی واگذار میکند. همچنین یک تابع ساده به نام ProcessPayment به عنوان رویکرد جایگزین پیادهسازی شده است. در تابع main، استفاده از هر دو رویکرد (Context و تابع مستقیم) نمایش داده شده و نحوه تغییر پویای استراتژیها در زمان اجرا نشان داده شده است. همچنین سناریویی برای پرداختهای متعدد با استراتژیهای مختلف و مدیریت خطا برای زمانی که استراتژی تنظیم نشده، پیادهسازی شده است.
0 commit comments