Design Pattern - Decorator Pattern - Part 3
Pendahuluan
Untuk melihat apa itu Design Pattern, bisa dilihat di sini
Untuk melihat Design Pattern yang diajukan oleh Gang Of Four, bisa dilihat di sini
Untuk melihat Pendahulan Design Pattern - Decorator - Part 1
Untuk melihat Part 2 Design Pattern - Decorator - Part 2
Sekarang kita lihat contoh Decorator Pattern
Kita akan menggunakan contoh Rumah seperti contoh sebelumnya :
Jadi sesuai dengan penjelasan di Design Pattern - Decorator - Part 2, maka akan ada :
- 1 interface umum untuk Decorator ini, katakanlah namanya Rumah, mempunyai method umum bernama decorate.
- 1 class sebagai class aslinya, katakanlah kita akan membuat RumahMinimalis implements Rumah
- 1 class wrapper/baseDecorator , kita akan membuat BaseDecorator implements Rumah. Didalamnya ada attribute wrappee yang bertipe Interface Rumah.
- kita akan membuat 2 fungsi Decorator, yaitu untuk menambahkan taman, dan fungsi untuk menambahkan rangka kayu.
Ok..lets go to the code ..
// INTERFACE RUMAH
package com.example.demo.rumah;
public interface Rumah {
void decorate();
}
// CLASS RUMAHMINIMALIS SEBAGAI CLASS ASLINYA
package com.example.demo.rumah;
public class RumahMinimalis implements Rumah {
@Override
public void decorate() {
System.out.println("Decorate Rumah Minimalis");
}
}
// CLASS BASEDECORATOR sebagai wrapper
package com.example.demo.rumah;
public class BaseDecorator implements Rumah {
private Rumah rumahAsli;
public BaseDecorator(Rumah rumahAsli) {
this.rumahAsli = rumahAsli;
}
@Override
public void decorate() {
rumahAsli.decorate();
}
}
// CLASS TAMAN DECORATOR untuk dekorasi Taman
package com.example.demo.rumah;
public class TamanDecorator extends BaseDecorator {
public TamanDecorator(Rumah rumahAsli) {
super(rumahAsli);
}
@Override
public void decorate() {
super.decorate();
System.out.println("Decorate Taman");
}
}
// CLASS RANGKA DECORATOR untuk dekorasi rangka
package com.example.demo.rumah;
public class RangkaDecorator extends BaseDecorator {
public RangkaDecorator(Rumah rumahAsli) {
super(rumahAsli);
}
@Override
public void decorate() {
super.decorate();
System.out.println("Decorate Rangka");
}
}
Ok, strukturnya sudah selesai.
Kita coba melakukan testing terhadap code diatas :
package com.example.demo.rumah;
public class MainTest {
public static void main(String[] args) {
Rumah rumahHasil1 = new RangkaDecorator(new TamanDecorator(new RumahMinimalis()));
rumahHasil1.decorate();
System.out.println("");
Rumah rumahHasil2 = new TamanDecorator(new RumahMinimalis());
rumahHasil2.decorate();
}
}
dan hasilnya :
Decorate Rumah Minimalis
Decorate Taman
Decorate Rangka
Decorate Rumah Minimalis
Decorate Taman