حوزه: 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 {یک مثال عملی از الگوی طراحی Proxy، مبحث Lazy Loading در ORM ها میباشد که در روابط موجودیتها در حالت Lazy Loading بجای موجودیت اصلی یک Proxy از آن موجودیت درون سایر موجودیتها قرار داده میشود و در زمان فراخوانی متد getter موجودیت واقعی فراخوانی (load) میگردد.
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();
}
}
مثال پیاده سازی شده با زبان جاوا را میتوانید از github من دانلود کنید.
اگر قبلا در بیان ثبت نام کرده اید لطفا ابتدا وارد شوید، در غیر این صورت می توانید ثبت نام کنید.