HamidReza Ireh

حمیدرضا ایره

HamidReza Ireh

حمیدرضا ایره

حوزه: Object
هدف: Structural
نقش الگو

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

طراحی الگو
طراحی الگوی Proxy در قالب نمودار UML در شکل زیر نشان داده شده است.

پیاده سازی

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

public interface Image {
void display();
}
public class RealImage implements Image {

private String fileName;

public RealImage(String fileName) {
this.fileName = fileName;
loadFromDisk(fileName);
}

public void display() {
System.out.println("Displaying " + fileName);
}

private void loadFromDisk(String fileName) {
System.out.println("Loading " + fileName);
}
}
public class ProxyImage implements Image {

private RealImage realImage;
private String fileName;

public ProxyImage(String fileName) {
this.fileName = fileName;
}

public void display() {
if (realImage == null) {
realImage = new RealImage(fileName);
}
realImage.display();
}
}
public class App {
public static void main(String[] args) {
Image image = new ProxyImage("test.jpg");

//image will be loaded from disk
image.display();
System.out.println();

//image will not be loaded from disk
image.display();
}
}
یک مثال عملی از الگوی طراحی Proxy، مبحث Lazy Loading در ORM ها می‌باشد که در روابط موجودیت‌ها در حالت Lazy Loading بجای موجودیت اصلی یک Proxy از آن موجودیت درون سایر موجودیت‌ها قرار داده می‌شود و در زمان فراخوانی متد getter موجودیت واقعی فراخوانی (load) می‌گردد.

مثال پیاده سازی شده با زبان جاوا را می‌توانید از github من دانلود کنید.

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

کاربران بیان میتوانند بدون نیاز به تأیید، نظرات خود را ارسال کنند.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی