پاسخ داده شد
الگوی طراحی Decorator چگونه عمل می کند؟
- فرشته حقیقی 1 سال قبل سوال کرد
- شما باید برای ارسال دیدگاه وارد شوید
پاسخ عالی
الگوی طراحی 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 سال قبل پاسخ داد
- شما باید برای ارسال دیدگاه وارد شوید
پاسخ شما