Decorator Pattern adalah pattern yang digunakan untuk menambahkan fungsionalitas baru ke dalam objek tanpa merubah struktur objek tersebut. Decorator Pattern termasuk ke dalam Structural Pattern.
Perhatikan illustrasi gambar diatas, dimana objek TextView pada awalnya tidak memiliki atribut apapun, alisa kosong. Kemudian user mengiginkan adanya penambahan fitur pada TextView berupa fitur scroll yang digunakan apabila text melebihi tinggi TextView yang telah ditetapkan. Selain itu, user juga menginginkan adanya fitur border agar telihat lebih menarik. Nah, pada konsep decorator pattern ini fitur tambahan Scroll dan Border juga merupakan sebuah objek. Hanya saja disini dia hanya berperan sebagai objek tambahan bagi objek utama yaitu TextView. Dengan decorator pattern inilah, langkah penambahan fitur dibuat lebih dengan fleksibel dan mudah.
(illustrasi sub : fadlikadn.wordpress.com)
Berikut adalah contoh implementasi dari Decorator Pattern.
Note : Bagi pengguna mobile, mohon aktifkan JavaScript dan matikan fitur Google Web Light untuk melihat kode berikut secara keseluruhan.
1. Buat interface Shape.java
package main; public interface Shape { public void draw(); }
2. Buat class Circle.java
package main; public class Circle implements Shape{ @Override public void draw() { System.out.println("Bentuk : Lingkaran"); } }
3. Buat class Square.java
package main; public class Square implements Shape { @Override public void draw() { System.out.println("Bentuk : Persegi"); } }
4. Buat class ShapeDecorator.java
package main; public abstract class ShapeDecorator implements Shape { protected Shape decoratedShape; public ShapeDecorator(Shape decoratorShape){ this.decoratedShape = decoratorShape; } @Override public void draw() { decoratedShape.draw(); } }
5. Buat class RedShapeDecorator.java
package main; public class RedShapeDecorator extends ShapeDecorator{ public RedShapeDecorator(Shape decoratorShape) { super(decoratorShape); } @Override public void draw(){ decoratedShape.draw(); setRedBorder(decoratedShape); } private void setRedBorder(Shape decoratedShape){ System.out.println("Warna Border : Merah"); } }
6. class Main.java
package main; public class Main { public static void main(String[] args){ Shape circle = new Circle(); Shape redCircle = new RedShapeDecorator(new Circle()); Shape redSquare = new RedShapeDecorator(new Square()); System.out.println("Lingkaran tanpa border"); circle.draw(); System.out.println("\nLingkaran di Border merah"); redCircle.draw(); System.out.println("\nPersegi di Border merah"); redSquare.draw(); } }
7. Verifikasi Output
Lingkaran tanpa border Bentuk : Lingkaran Lingkaran di Border merah Bentuk : Lingkaran Warna Border : Merah Persegi di Border merah Bentuk : Persegi Warna Border : Merah
Baca Juga :
Java Facade Pattern
Entri Sebelumnya :
Java Composite Pattern
No comments:
Post a Comment