پروکسی mahdi.sg مرداد ۲۶, ۱۴۰۳

پــروکــســی (proxy)


هـــدف

الگوی پروکسی یک الگوی طراحی ساختاری است که به شما امکان می‌دهد یک جایگزین یا نگهدارنده برای یک شیء دیگر فراهم کنید. پروکسی کنترل دسترسی به شیء اصلی را بر عهده دارد و به شما اجازه می‌دهد قبل یا بعد از رسیدن درخواست به شیء اصلی، اقداماتی انجام دهید.

Proxy design pattern

 

مـسئـــلـه

چرا می‌خواهید دسترسی به یک شیء را کنترل کنید؟ در اینجا مثالی وجود دارد: شما یک شیء عظیم دارید که مقدار زیادی از منابع سیستم را مصرف می‌کند. شما گاهی به آن نیاز دارید، اما نه همیشه.

جستارهای پایگاه داده می تواند واقعاً کند باشد.

می‌توانید یک مقداردهی اولیه تنبل را پیاده‌سازی کنید: این شیء را فقط زمانی ایجاد کنید که واقعاً مورد نیاز است. تمام مشتریان شیء باید کد مقداردهی اولیه تأخیری را اجرا کنند. متأسفانه، این احتمالاً باعث تکرار زیاد کد می‌شود.

در یک دنیای ایده‌آل، ما می‌خواهیم این کد را مستقیماً در کلاس شی خود قرار دهیم، اما این همیشه امکان‌پذیر نیست. برای مثال، این کلاس ممکن است بخشی از یک کتابخانه شخص ثالث بسته باشد.

الگوی پروکسی پیشنهاد می‌کند که یک کلاس پروکسی جدید با همان رابط شی سرویس اصلی ایجاد کنید. سپس برنامه خود را به گونه‌ای به‌روزرسانی کنید که شی پروکسی را به تمام مشتریان شی اصلی منتقل کند. هنگام دریافت درخواست از یک مشتری، پروکسی یک شی سرویس واقعی ایجاد می‌کند و تمام کارها را به آن واگذار می‌کند.

Solution with the Proxy pattern

پروکسی خود را به عنوان یک شی پایگاه داده پنهان می کند.
می‌تواند بدون اینکه کلاینت یا شی پایگاه داده واقعی بداند، مقداردهی اولیه‌سازی تنبل و ذخیره نتایج را انجام دهد.

اما چه فایده‌ای دارد؟ اگر نیاز دارید قبل یا بعد از منطق اصلی کلاس چیزی را اجرا کنید، پروکسی به شما اجازه می‌دهد این کار را بدون تغییر آن کلاس انجام دهید. از آنجایی که پروکسی همان رابط را با کلاس اصلی پیاده‌سازی می‌کند، می‌توان آن را به هر مشتری که انتظار یک شی سرویس واقعی دارد، منتقل کرد.

A credit card is a proxy for a bundle of cash

از کارت‌های اعتباری می‌توان همانند پول نقد برای پرداخت استفاده کرد.

کارت اعتباری یک پروکسی برای حساب بانکی است که خود پروکسی‌ای برای یک دسته پول است. هر دو یک رابط مشترک را پیاده‌سازی می‌کنند: می‌توان از آن‌ها برای انجام پرداخت استفاده کرد. یک مصرف‌کننده احساس خوبی دارد زیرا نیازی به حمل مقدار زیادی پول نقد ندارد. صاحب فروشگاه نیز خوشحال است زیرا درآمد حاصل از تراکنش به صورت الکترونیکی به حساب بانکی فروشگاه اضافه می‌شود بدون اینکه خطر از دست دادن سپرده یا سرقت در راه بانک وجود داشته باشد.

ســاخــتـــار

Structure of the Proxy design pattern

 

 

برای مطـالعـه متن کامل مقالــه، مجموعه کــــدها، نحوه پیاده سازی، مزایا و معایب و روابط با الگوهای دیگر، ایــنــجـــا کلیک کنید.