Facade Pattern “Si Operator”
Pernah menelepon suatu nomor yang menggunakan ekstensi? Misalnya menelepon suatu perusahaan. Biasanya pada awal interaksi, ada suara mesin yang meminta untuk memencet nomor ekstensi yang kita dituju atau “tekan 0 untuk bicara dengan operator kami”. Misalkan seseorang ingin bicara dengan Putri Chairina (halah!). Ralat..ralat.. Misalkan seseorang ingin bicara dengan bagian pemasaran namun ia tidak tahu nomor ekstensi bagian pemasaran. Maka orang tersebut pun menekan 0, kemudian ia bicara dengan operator, lalu minta tolong disambungkan ke bagian pemasaran. Operator yang akan meneruskan koneksi orang tersebut ke bagian pemasaran. Penelepon tidak tahu apa yang terjadi. (mungkinkah si operator melihat daftar tulisan, bertanya ke teman operator lain, atau ia sudah hapal?)
Seperti itulah filosofi dari Facade Pattern. Facade artinya “tembok luar” atau “muka bangunan”. Orang yang melintas hanya dapat melihat luarnya saja, tanpa mengetahui isi di dalamnya.
Dengan menggunakan facade, detil proses dan kompleksitas sistem disembunyikan dari pengguna. Pengguna hanya perlu mengakses facade untuk dapat memanfaatkan salah satu fungsi dalam sistem.
Contoh facade berikut saya ambil dari allapplabs.
Misalkan ada sebuah toko. Pelanggan ingin mendapatkan suatu barang. Ia tidak tahu dimana letak barang itu. Untungnya pada toko ini dipekerjakan penjaga toko yang sudah hapal letak barang-barang.
public interface Store{
public Goods getGoods();
}//end of interface
/**
FinishedGoodsStore merupakan salah satu jenis barang di toko. Selain ini ada pula PackingMaterialStore dan RawMaterialStore.
*/
public class FinishedGoodsStore implements Store {
public Goods getGoods() {
FinishedGoods finishedGoods = new FinishedGoods();
return finishedGoods;
}
}// end of class
// facade
// kelas yang akan membantu pengguna mengakses sistem
public class StoreKeeper {
public Goods getGoods(String goodsType) {
if (goodsType.equals("Packaging")) {
PackingMaterialStore store = new PackingMaterialStore();
PackingMaterialGoods packingMaterialGoods = (PackingMaterialGoods)store.getGoods();
return packingMaterialGoods;
}
else if (goodsType.equals("Finished")) {
FinishedGoodsStore store = new FinishedGoodsStore();
FinishedGoods finishedGoods = (FinishedGoods)store.getGoods();
return finishedGoods;
}
else {
RawMaterialStore store = new RawMaterialStore();
RawMaterialGoods rawMaterialGoods = (RawMaterialGoods)store.getGoods();
return rawMaterialGoods;
}
}// End of class facade
Cara pengguna untuk mengakses sistem :
new StoreKeeper().getGoods(“Packaging”);
Referensi :
- http://www.javaworld.com/javaworld/jw-05-2003/jw-0530-designpatterns.html?page=1
- http://www.allapplabs.com/java_design_patterns/facade_pattern.htm
- http://sourcemaking.com/design_patterns/facade
- http://www.informit.com/guides/content.aspx?g=java&seqNum=136
- http://java.sun.com/blueprints/patterns/SessionFacade.html
0 Comments
aliefte
ijin ngopi lagiiii… makasihhh..:D
bijakfajar
putri masih betah dengan yang beginian yah???
wkwkwkwk