Tasarım Desenleri - Dekoratör Deseni

Dekoratör deseni, bir kullanıcının yapısını değiştirmeden mevcut bir nesneye yeni işlevsellik eklemesine izin verir. Bu desen türü, bu desen mevcut sınıf için bir sarmalayıcı görevi gördüğünden yapısal modele girer.

Bu desen, orijinal sınıfı saran ve sınıf yöntemlerinin imzasını olduğu gibi koruyan ek işlevsellik sağlayan bir dekoratör sınıfı oluşturur.

Bir şekli, şekil sınıfını değiştirmeden bir renkle dekore edeceğimiz aşağıdaki örnekle dekoratör deseninin kullanımını gösteriyoruz.

Uygulama

Biz oluşturmak için gidiyoruz Şekli arayüzü ve uygulama beton sınıfları Şekli arayüzü. Daha sonra Shape arayüzünü uygulayan ve örnek değişkeni olarak Shape nesnesine sahip olan bir ShapeDecorator soyut dekoratör sınıfı oluşturacağız .

RedShapeDecorator , ShapeDecorator uygulayan somut bir sınıftır .

DecoratorPatternDemo , demo sınıfımız Shape nesnelerini dekore etmek için RedShapeDecorator kullanacaktır .

Aşama 1

Bir arayüz oluşturun.

Shape.java

public interface Shape {
   void draw();
}

Adım 2

Aynı arayüzü uygulayan somut sınıflar oluşturun.

Rectangle.java

public class Rectangle implements Shape {

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

Circle.java

public class Circle implements Shape {

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

Aşama 3

Shape arabirimini uygulayan soyut dekoratör sınıfı oluşturun .

ShapeDecorator.java

public abstract class ShapeDecorator implements Shape {
   protected Shape decoratedShape;

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

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

4. adım

ShapeDecorator sınıfını genişleten somut dekoratör sınıfı oluşturun .

RedShapeDecorator.java

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

Adım 5

Shape nesnelerini süslemek için RedShapeDecorator'u kullanın .

DekoratörPatternDemo.java

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

6. Adım

Çıkışı doğrulayın.

Circle with normal border
Shape: Circle

Circle of red border
Shape: Circle
Border Color: Red

Rectangle of red border
Shape: Rectangle
Border Color: Red