Anda di halaman 1dari 27

Design

Pattern
Decorator

Adam Hendra Brata

PPP Tujuan Perkuliahan


Memahami structural pattern: Decorator

Web Services

PPP

Web Services

introduksi

PPP Introduksi
Pernah minum kopi ?
Saat kita akan membeli kopi di sebuah restoran, maka kita
dihadapkan pada banyak sekali pilihan variasi kopi yang bisa
dipesan
Espresso, Latte, Black Coffee dll.

Web Services

Pertanyaannya, apa yang membedakan semua jenis variasi


minuman kopi tersebut ?
Pertanyaan selanjutnya adalah, bagaimana cara Barista
meracik kopi yang kita pesan sesuai dengan jenisnya
masing masing ?

PPP Introduksi
Tahu apa itu istilah Coffee Decoration ?

Web Services

PPP Introduksi

Web Services

PPP Introduksi
Alur kerja peracikan kopi
Barista mengambil salah satu jenis biji kopi dasar dan
menggiling biji kopi tersebut dengan mesin agar menjadi bubuk
kopi
Bubuk kopi yang sudah halus akan diseduh untuk membuat
kopi

Web
Services
Selanjutnya setelah seduhan kopi jadi, maka Barista akan

meracik varian kopi yang kita pesan dengan


mengkombinasikan bahan campuran sesuai dengan pesanan
kita
Melakukan campuran dengan susu / krim
Melakukan campuran dengan bahan lain, misalnya es krim,
mocha dan lain lain

Setelah jadi maka kopi tersebut akan diberikan kepada kita

PPP

Web Services

decorator

PPP Decorator
Tujuan
Melampirkan tanggung jawab tambahan pada sebuah objek
secara dinamis
Memberikan alternatif untuk melakukan penurunan kelas yang
lebih fleksibel dengan tujuan memperluas fungsionalitasnya

Web Services

Dikenal juga dengan nama Wrapper

PPP Motivasi
Beverage adalah klas
abstrak, sifatnya dituruni
oleh klas-klas turunannya
yaitu minuman yang ada
dalam menu

cost() adalah method


abstrak yang harus
diimplementasikan oleh
tiap subklas

description adalah
atribut untuk
memberikan deskripsi
pada klas Beverage dan
nantinya akan diturunkan
pada subklas

Tiap subklas mengimplementasikan method cost() untuk harga dari setiap jenis
minuman yang spesifik

PPP Motivasi

PPP Motivasi
Method cost() yang dimiliki
oleh klas Beverage
bertanggungjawab untuk
menghitung harga dari
bahan campuran saja
Method ini akan
diimplementasikan lebih
lanjut di subklas untuk
menghitung harga tiap
minuman

Setiap method cost()


pada tiap subklas
minuman harus dapat
menghitung harga dari
tiap minuman secara
spesifik, sekaligus harga
dari bahan campuran
yang dipakai

PPP Motivasi
Masih ingat dengan alur kerja peracikan kopi ?
Barista menyeduh kopi dari biji kopi jenis DarkRoast
Mendekorasinya dengan mocha
Mendekorasinya dengan krim

Web Services

Memanggil fungsi cost() untuk menghitung harga dari minuman


yang dipesan dengan
cara mengandalkan
proses pendelegasian
method untuk
menghitung penambahan
harga tiap bahan
campuran

PPP Pemakaian
Untuk menambah tanggung jawab untuk tiap objek individu
secara dinamis dan transparan tanpa mempengaruhi objek
lainnya
Untuk pendelegasian tanggung jawab yang dapat ditarik
kembali

Web Services

Ketika ekstensi oleh subklas / penurunan kelas menjadi tidak


praktis
Terkadang dimungkinkan adanya jumlah ekstensi independen
yang besar dan akan mengakibatkan ledakan jumlah subklas
untuk mendukung setiap kombinasi yang mungkin
Definisi kelas yang mungkin tersembunyi atau tidak tersedia
untuk penurunan kelas

PPP Struktur

Web Services

PPP Unsur
Component
mendefinisikan antarmuka untuk objek yang dapat diberikan
tanggung jawab tambahan secara dinamis

ConcreteComponent
mendefinisikan sebuah objek yang dapat diberikan tanggung
jawab tambahan

Web Services

Decorator
mempertahankan referensi ke objek Component dan
mendefinisikan sebuah antarmuka yang sesuai dengan
antarmuka Component tersebut

ConcreteDecorator
menambahkan tanggung jawab untuk komponen tertentu

PPP Konsekuensi
Kolaborasi
Dekorator meneruskan permintaan ke objek Component nya
Bisa jadi dekorator dapat melakukan operasi tambahan
sebelum dan setelah meneruskan permintaan (secara
opsional)

Konsekuensi

Web
Services
(+) Lebih fleksibel daripada pewarisan statis menambahkan
properti ganda dengan lebih mudah
(+) Menghindari klas-klas dengan feature-laden yang tinggi
dalam hirarki pendekatan PAYG
(!) Dekorator dan komponennya tidak identik jangan
bergantung pada identitas objek
(!) Banyak objek-objek kecil yang terlihat sama susah untuk
dipelajari atau dilacak

PPP Implementasi
Kesesuaian Antarmuka
Antarmuka objek dekorator harus sesuai dengan antarmuka
komponen yang akan dia dekorasi

Menghilangkan klas Decorator abstrak


Tidak perlu mendefinisikan klas dekorator abstrak ketika kita
hanya perlu menambahkan satu tanggung jawab

Web Services

Menjaga klas Component tetap ringan


Untuk memastikan antarmuka tetap sesuai, komponen dan
dekorator harus diturunkan dari klas Component umum
Sangat penting untuk menjaga klas umum ini tetap ringan, yaitu
harus fokus pada pendefinisian antarmuka, bukan pada
penyimpanan data

PPP

Web Services

Contoh kode

PPP Contoh Kode

Web Services

PPP Contoh Kode

Web Services

PPP Contoh Kode

Web Services

PPP Contoh Kode

Web Services

PPP Contoh Kode

Web Services

PPP Contoh Kode

Web Services

PPP Contoh Kode

Web Services

PPP

Terimakasih
v^^
Web Services

Im with you till


the end of the line