design pattern, java, جاوا, دیزاین پترن

Decorator پترن در جاوا (Design Pattern)

Decorator پترن در جاوا

در این قسمت تیم کدگیت را با آموزش Decorator پترن در جاوا همراهی کنید. پیش نیاز این آموزش شامل موارد زیر می‌باشد:

  1. Interface در جاوا
  2. ارث بری در جاوا
  3. شی گرایی در جاوا
  4. متد در جاوا
  5. Constructor در جاوا

Structural Patterns

یکی از زیر شاخه‌های دیزاین پترن Structural Patterns است. Structural Patterns در مورد اشیا و کلاس‌ها و چگونگی ترکیب آنها با یکدیگر صحبت می‌کند. برای مشخص کردن ارتباط اشیا و کلاس‌ها با یکدیگر، این پترن ساختار ساده‌ای را ایجاد می‌کند (البته بیشتر تمرکز این پترن بر روی شی گرایی است).

Decorator پترن در جاوا

Decorator پترن به کاربر اجازه می‌دهد ویژگی‌های جدید را به یک شی ساخته شده، اضافه کند. این پترن یکی از شاخه‌های Structural Pattern می‌باشد. در این پترن معمولا یک کلاس Decorator ساخته می‌شود که علاوه بر ویژگی‌های یک شی خاص ویژگی‌های کاربر را نیز در بر می‌گیرد.

کد Decorator پترن در جاوا

فرض کنید ما یک interface به نام Shape داریم و متدی به نام Draw در خود دارد. ما یک ویژگی (رنگ Border) به این Shape را به کمک Decorator پترن اضافه می‌کنیم. در تصویر بالا دیاگرام کلاس‌های به کار گرفته شده را می‌بینید. کد کلاس‌ها به صورت زیر می‌باشد:

public interface Shape {
     void draw();
}
public class Circle implements Shape {

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

     @Override
     public void draw() {
          System.out.println("Shape: Rectangle");
     }
}
public abstract class ShapeDecorator implements Shape {
     protected Shape decoratedShape;

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

     public void draw() {
          decoratedShape.draw();
     }
}
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");
     }
}

تست کد Decorator پترن در جاوا

برای تست کدهای بالا، کدmain زیر را بزنید:

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

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *