+2 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

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

2 پاسخ

+3 امتیاز
قبل توسط (1.1هزار امتیاز)
انتخاب شده قبل توسط
 
بهترین پاسخ

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

+2 امتیاز
قبل توسط (1.1هزار امتیاز)

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

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

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

سوالات مشابه

0 امتیاز
0 پاسخ 444 بازدید
0 امتیاز
1 پاسخ 1.5هزار بازدید
+1 امتیاز
1 پاسخ 1.5هزار بازدید
+2 امتیاز
1 پاسخ 946 بازدید
+1 امتیاز
2 پاسخ 3.9هزار بازدید
+1 امتیاز
1 پاسخ 2.2هزار بازدید
+1 امتیاز
0 پاسخ 429 بازدید
+1 امتیاز
1 پاسخ 1.9هزار بازدید
...