بخش های اصلی

آموزش الگوهای طراحی

Design Pattern - الگوی Proxy

در الگوی proxy، یک کلاس، عملکردِ کلاس دیگری را نشان میده. این نوع از الگوی طراحی زیرگروه الگوی ساختاری (structural) محسوب میشه.

در الگوی proxy، شیءای را با داشتنِ اصلِ آن، ایجاد می کنیم تا عملکردهای آن را با دنیای بیرونی ارتباط بدیم.

پیاده سازی

در این بخش یک رابط به نام Image و کلاسِconcreteای که رابطِ Image را پیاده سازی می کنه، ایجاد می کنیم. ProxyImage یک کلاسِ proxy است که برای کاهش استفاده از حافظه به هنگام بارگذاری شیءِ RealImage استفاده میشه.

ProxyPatternDemo، نسخه ی آزمایشیِ کلاس مان، از ProxyImage برای گرفتن یک شیءِ Image، جهت بارگذاری و نمایش آن در صورت نیاز، استفاده می کنه.

proxy pattern uml diagram

مرحله ی 1

ایجاد یک رابط.

Image.java

public interface Image {
   void display();
}

مرحله ی 2

ایجاد کلاس های concreteای که رابطی یکسان پیاده سازی می کنن.

RealImage.java

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);
   }
}

ProxyImage.java

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();
   }
}

مرحله ی 3

استفاده از Proxymage برای گرفتن شیء از کلاسِ RealImage در مواقع مورد نیاز.

ProxyPatternDemo.java

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(); 	
   }
}

مرحله ی 4

بررسی خروجی

Loading test_10mb.jpg
Displaying test_10mb.jpg

Displaying test_10mb.jpg

مبحث آموزشی

آموزش الگوهای طراحی

Learn Design Patterns

سرفصل ها

پرســیدن سؤال جدید

سؤال های تخصصی خود را از ما بپرسید

تبلیغات

دنبال کردن تلگرام کانال سافت اسکیل

https://telegram.me/softskill_ir

عملیات کاربران

خبـرنــامه

Newsletters

در خبــرنـامه سافت اسکیل عضو شویــد تا جدیدترین هـای سایت را بلافاصله در ایمیل خـود دریافت کنیـد