EN

Search
Close this search box.

موستانگ، وحشیِ دوست داشتنی

پاسخ داده شد
0
0

الگوی طراحی Decorator  چگونه عمل می کند؟

  • شما باید برای ارسال دیدگاه شوید
پاسخ عالی
0
0

الگوی طراحی Decorator  برای اضافه کردن ویژگی ها و قابلیت های جدید به یک آبجکت در زمان  اجرا می باشد.این الگو با استفاده از اینترفیس و پیاده سازی آن انجام می شود. در مثال زیر یک نمونه از این الگو را پیاده سازی می کنیم

ابتدا یک اینترفیس تعریف می کنیم.

public interface Shape {
   void draw();
}

سپس دو پیاده سازی  برای آن تعریف می کنیم.

public class Rectangle implements Shape {

   @Override
   public void draw() {
      System.out.println("Shape: Rectangle");
   }
}

public class Circle implements Shape {

   @Override
   public void draw() {
      System.out.println("Shape: Circle");
   }
}

سپس یک اینترفیس  decorator تعریف می کنیم

public abstract class ShapeDecorator implements Shape {
   protected Shape decoratedShape;

   public ShapeDecorator(Shape decoratedShape){
      this.decoratedShape = decoratedShape;
   }

   public void draw(){
      decoratedShape.draw();
   }	
}

یک پیاده سازی برای این decorator تعریف می کنیم.

public class RedShapeDecorator extends ShapeDecorator {

   public RedShapeDecorator(Shape decoratedShape) {
      super(decoratedShape);		
   }

   @Override
   public void draw() {
      decoratedShape.draw();	       
      setRedBorder(decoratedShape);
   }

   private void setRedBorder(Shape decoratedShape){
      System.out.println("Border Color: Red");
   }
}

از آنجایی که در کلاس ShapeDecorator یک آبجکت از کلاس Shape می گیرد می توانیم هر نوع کلاس زیرمجموعه ای از کلاس Shape  را  به آن بدهیم و بنابراین هر آبجکت از کلاس RedShapeDecorator می تواند ویژگی های متفاوتی داشته باشد.

در مثال زیر دو آبجکت از کلاس  RedShapeDecorator ایجاد کردیم که هر کدام قابلیتهای متفاوتی دارند.

public class DecoratorPatternDemo {
   public static void main(String[] args) {

      Shape circle = new Circle();

      Shape redCircle = new RedShapeDecorator(new Circle());

      Shape redRectangle = new RedShapeDecorator(new Rectangle());
      System.out.println("Circle with normal border");
      circle.draw();

      System.out.println("\nCircle of red border");
      redCircle.draw();

      System.out.println("\nRectangle of red border");
      redRectangle.draw();
   }
}
  • شما باید برای ارسال دیدگاه شوید
نمایش 1 نتیجه
پاسخ شما
اگر قبلاً حساب کاربری دارید با پر کردن فیلد های زیر یا به عنوان مهمان ارسال کنید.
نام*
ایمیل*
وب سایت