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