الگوی طراحی Proxy چیست؟

+2 رأی
میانگین بازدید روزانه 1.042,169 بازدید

الگوی طراحی Proxy چیست؟ لطفا با مثال عملی توضیح دهید.

سوال 5 سال قبل در تالار برنامه نویسی توسط Saeed Zarinfam (149 امتیاز)

2 جواب

+3 رأی
 
بهترین جواب

Proxy Design Pattern چیست؟

فرض کنید object هایی دارید که

•ایجاد کردن اونها هزینه زیادی داره (از نظر منابع سیستمی)

•مایلید تا سطح دسترسی به اون Object ها رو (از نظر امنیتی منظورمه) به نوعی کنترل کنید

•قصد دارید تا به Object ای روی ماشین Remote دسترسی پیدا کنید (همون ایده Proxy/Stub در COM/DCOM).

•مایلید تا هنگام دسترسی اون Object ها، کاری اضافه بر سازمان انجام بدید

اگر چنین Object هایی در سیستم دارید، Proxy Pattern میتونه به شما کمک کنه. واژه Proxy به معنای نماینده یا وکیل هستش، نماینده ای برای دسترسی به Object اصلی. ایجاد این نماینده (بر خلاف Object اصلی) هزینه بر نیست. این نماینده هنگامیکه شما واقعا به اون Object اصلی نیاز داشته باشید اونو ایجاد میکنه و در دسترس شما قرار میده (در حقیقت با به تاخیر انداختن ایجاد Object اصلی، از Resource های سیستمی به خوبی بهره میبره)، ضمن اینکه قدرت این الگو اونجا نمایان میشه که شما بصورت مستقیم به Object اصلی دسترسی نداشته باشید و لزوما مجبور باشید از طریق Proxy فرایند مورد نظر رو پیش ببرید. به نمودار زیر دقت کنید:

همونطوریکه می بینید، عناصر مهم این الگو عبارتند از:

•ISubject: اینترفیسی که RealSubject و Proxy هر دو اونو پیاده سازی میکنن.

•RealSubject: کلاس اصلی که "عملکردش" از طریق Proxy در دسترس دیگران قرار میگیره.

•Proxy: کلاسی که RealSubject رو ایجاد و کنترل میکنه. این کلاس میتونه سطح دسترسی به RealSubject رو در اختیار خودش نیز بگیره.

•Request: درخواست مورد نظر که از طریق Proxy پردازش میشه یا به RealSubject اونو delegate میکنه.

با این توضیحات گمان نمی کنم دیگه نیازی به آوردن مثال باشه، چون ایده بسیار ساده ای هستش، اما در عین حال میتونه بسیار راه گشا باشه و معماری یه سیستم نرم افزاری رو تحت تاثیر قرار بده. با اینحال، برای مشاهده مثال به زبان C#‎‎ می تونید به این آدرس رجوع کنید.

با تشکر از : http://barnamenevis.org

جواب 5 سال قبل توسط my20 (1,097 امتیاز)
انتخاب شده در 5 سال قبل توسط Saeed Zarinfam
+2 رأی

الگوی طراحی Proxy در مواردی کاربرد دارد که به هر دلیلی دسترسی به یک منبع دشوار است (در دسترس نبودن یا حجیم بودن شئ یا کندی برنامه)، در این حالات بجای شئ اصلی از یک شئ پروکسی استفاده می شود که هر دو کلاس (هم کلاس شئ اصلی و هم پروکسی) یک رابط را پیاده سازی کرده اند و برنامه بجای ارتباط با شئ اصلی با شئ پروکسی ارتباط برقرار می کند و شئ پروکسی ارتباط به شئ اصلی را برقرار می کند و یا شبیه سازی می کند.

همانطور که در کلاس دیاگرام فوق مشاهده می کنید، کلاس Client با استفاده از رابط Subject با کلاس Proxy رابطه دارد و این کلاس Proxy است که کلاس RealSubject را فراخوانی می کند.

یک مثال عملی از الگوی طراحی Proxy، مبحث Lazy Loading در ORM ها است که در روابط موجودیت ها در حالت Lazy Loading بجای موجودیت اصلی یک Proxy از آن موجودیت درون سایر موجودیت ها قرار داده می شود و در زمان فراحوانی متد getter موجودیت واقعی فراخوانی (load) می شود.

جواب 5 سال قبل توسط Saeed Zarinfam (149 امتیاز)

سوال های مشابه

0 رأی
0 جواب میانگین بازدید روزانه 0.2254 بازدید
0 رأی
0 جواب میانگین بازدید روزانه 0.33453 بازدید
0 رأی
1 جواب میانگین بازدید روزانه 0.511,061 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.581,213 بازدید
+2 رأی
1 جواب میانگین بازدید روزانه 0.23477 بازدید
+1 رأی
2 جواب میانگین بازدید روزانه 1.413,029 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.831,782 بازدید
+1 رأی
0 جواب میانگین بازدید روزانه 0.13288 بازدید
+1 رأی
1 جواب میانگین بازدید روزانه 0.711,594 بازدید
کانال تلگرام جواب یاب
...