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