پــروکــســی (proxy)
هـــدف
الگوی پروکسی یک الگوی طراحی ساختاری است که به شما امکان میدهد یک جایگزین یا نگهدارنده برای یک شیء دیگر فراهم کنید. پروکسی کنترل دسترسی به شیء اصلی را بر عهده دارد و به شما اجازه میدهد قبل یا بعد از رسیدن درخواست به شیء اصلی، اقداماتی انجام دهید.
مـسئـــلـه
چرا میخواهید دسترسی به یک شیء را کنترل کنید؟ در اینجا مثالی وجود دارد: شما یک شیء عظیم دارید که مقدار زیادی از منابع سیستم را مصرف میکند. شما گاهی به آن نیاز دارید، اما نه همیشه.
میتوانید یک مقداردهی اولیه تنبل را پیادهسازی کنید: این شیء را فقط زمانی ایجاد کنید که واقعاً مورد نیاز است. تمام مشتریان شیء باید کد مقداردهی اولیه تأخیری را اجرا کنند. متأسفانه، این احتمالاً باعث تکرار زیاد کد میشود.
در یک دنیای ایدهآل، ما میخواهیم این کد را مستقیماً در کلاس شی خود قرار دهیم، اما این همیشه امکانپذیر نیست. برای مثال، این کلاس ممکن است بخشی از یک کتابخانه شخص ثالث بسته باشد.
راهــکــــار
الگوی پروکسی پیشنهاد میکند که یک کلاس پروکسی جدید با همان رابط شی سرویس اصلی ایجاد کنید. سپس برنامه خود را به گونهای بهروزرسانی کنید که شی پروکسی را به تمام مشتریان شی اصلی منتقل کند. هنگام دریافت درخواست از یک مشتری، پروکسی یک شی سرویس واقعی ایجاد میکند و تمام کارها را به آن واگذار میکند.
اما چه فایدهای دارد؟ اگر نیاز دارید قبل یا بعد از منطق اصلی کلاس چیزی را اجرا کنید، پروکسی به شما اجازه میدهد این کار را بدون تغییر آن کلاس انجام دهید. از آنجایی که پروکسی همان رابط را با کلاس اصلی پیادهسازی میکند، میتوان آن را به هر مشتری که انتظار یک شی سرویس واقعی دارد، منتقل کرد.
مقایسه با دنیای واقعی
کارت اعتباری یک پروکسی برای حساب بانکی است که خود پروکسیای برای یک دسته پول است. هر دو یک رابط مشترک را پیادهسازی میکنند: میتوان از آنها برای انجام پرداخت استفاده کرد. یک مصرفکننده احساس خوبی دارد زیرا نیازی به حمل مقدار زیادی پول نقد ندارد. صاحب فروشگاه نیز خوشحال است زیرا درآمد حاصل از تراکنش به صورت الکترونیکی به حساب بانکی فروشگاه اضافه میشود بدون اینکه خطر از دست دادن سپرده یا سرقت در راه بانک وجود داشته باشد.
ســاخــتـــار
برای مطـالعـه متن کامل مقالــه، مجموعه کــــدها، نحوه پیاده سازی، مزایا و معایب و روابط با الگوهای دیگر، ایــنــجـــا کلیک کنید.