-
Notifications
You must be signed in to change notification settings - Fork 0
Proxy
یک جانشین یا جایگاه برای کنترل دسترسی به یک شیء ایجاد میکند.

- کنترل دسترسی یا Protection Proxy
- لاگ گیری در برنامه یاLogging Proxy
- Caching proxy
- اجرای لوکال یک سرویس از راه دور یا Remote Proxies
- Lazy initialization یا Virtual Proxy
- مرجع هوشمند
-
بدون اطلاع کلاینت ها، میتوان شی اصلی و چرخه ی عمر آن را کنترل کرد.
-
حتی اگر شی اصلی آماده ی به کار یا در دسترس نباشد، Proxy کار میکند.
-
میتوانید Proxy های جدید را بدون تغییر در شی اصلی یا کلاینت های آن تعریف کنید. (Open/Closed Principle)
-
بر خلاف شی اصلی هزینه بر نیست و زمانی که واقعا به شی اصلی نیاز داشته باشیم آن را ایجاد میکند و در دسترس قرار میدهد (در حقیقت با به تاخیر انداختن ایجاد شی اصلی، از منابع سیستمی به خوبی استفاده میکند).
-
از آنجا که proxy همان interface کلاس اصلی را پیاده سازی میکند، میتوان آن را در هر کلاینت که انتظار یک شی اصلی را دارد، جایگزین کرد.
-
باعث پیچیدهتر شدن کد شود زیرا باید کلاسهای جدید زیادی را معرفی کرد.
-
پاسخ از سمت سرویس دهنده ممکن است به تاخیر بیافتد.
دسترسیِ کارمندای یه شرکت به اینترنت
public interface OfficeInternetAccess {
public void grantInternetAccess();
} public class RealInternetAccess implements OfficeInternetAccess {
private String employeeName;
public RealInternetAccess(String empName) {
this.employeeName = empName;
}
@Override
public void grantInternetAccess() {
System.out.println("Internet Access granted for employee: "+ employeeName);
}
} public class ProxyInternetAccess implements OfficeInternetAccess {
private String employeeName;
private RealInternetAccess realaccess;
public ProxyInternetAccess(String employeeName) {
this.employeeName = employeeName;
}
@Override
public void grantInternetAccess() {
if (getRole(employeeName) > 2) {
realaccess = new RealInternetAccess(employeeName);
realaccess.grantInternetAccess();
} else {
System.out.println("No Internet access granted.");
}
}
public int getRole(String emplName) {
// Check role from the database based on Name and designation
// return job level or job designation.
return 3;
}
} public class ProxyPatternClient {
public static void main(String[] args)
{
OfficeInternetAccess access = new ProxyInternetAccess("Ghodsian");
access.grantInternetAccess();
}
} بارگیری عکس و کش کردن آن
public interface Image {
void display();
}
public class RealImage implements Image {
private String fileName;
public RealImage(String fileName){
this.fileName = fileName;
loadFromDisk(fileName);
}
@Override
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;
}
@Override
public void display() {
if(realImage == null){
realImage = new RealImage(fileName);
}
realImage.display();
}
}
public class ProxyPatternDemo {
public static void main(String[] args) {
Image image = new ProxyImage("test_10mb.jpg");
//image will be loaded from disk
image.display();
System.out.println("");
//image will not be loaded from disk
image.display();
}
}
Loading test_10mb.jpg
Displaying test_10mb.jpg
Displaying test_10mb.jpg