Pola Desain - Pola Dekorator

Pola dekorator memungkinkan pengguna menambahkan fungsionalitas baru ke objek yang sudah ada tanpa mengubah strukturnya. Jenis pola desain ini berada di bawah pola struktural karena pola ini bertindak sebagai pembungkus kelas yang ada.

Pola ini membuat kelas dekorator yang membungkus kelas asli dan menyediakan fungsionalitas tambahan yang menjaga agar tanda tangan metode kelas tetap utuh.

Kami mendemonstrasikan penggunaan pola dekorator melalui contoh berikut di mana kami akan menghias bentuk dengan beberapa warna tanpa mengubah kelas bentuk.

Penerapan

Kita akan membuat antarmuka Shape dan kelas beton yang mengimplementasikan antarmuka Shape . Kita kemudian akan membuat kelas dekorator abstrak ShapeDecorator yang mengimplementasikan antarmuka Shape dan memiliki objek Shape sebagai variabel instansinya.

RedShapeDecorator adalah kelas beton yang mengimplementasikan ShapeDecorator .

DecoratorPatternDemo , kelas demo kami akan menggunakan RedShapeDecorator untuk menghias objek Shape .

Langkah 1

Buat antarmuka.

Shape.java

public interface Shape {
   void draw();
}

Langkah 2

Buat kelas konkret dengan menerapkan antarmuka yang sama.

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

LANGKAH 3

Buat kelas dekorator abstrak dengan mengimplementasikan antarmuka Shape .

ShapeDecorator.java

public abstract class ShapeDecorator implements Shape {
   protected Shape decoratedShape;

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

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

LANGKAH 4

Buat kelas dekorator beton yang memperluas kelas ShapeDecorator .

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

LANGKAH 5

Gunakan RedShapeDecorator untuk menghias objek Shape .

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

LANGKAH 6

Verifikasi hasilnya.

Circle with normal border
Shape: Circle

Circle of red border
Shape: Circle
Border Color: Red

Rectangle of red border
Shape: Rectangle
Border Color: Red