structural pattern minum kopi ? saat kita akan membeli kopi di sebuah restoran, maka kita dihadapkan...
TRANSCRIPT
Design
Pattern
Adam Hendra Brata
Structural
Pattern
Decorator
PPP
Web Services
Tujuan Perkuliahan
Memahami structural pattern: Decorator
PPP
Introduksi
PPP
Web Services
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.
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
Web Services
Introduksi
PPP
Web Services
Introduksi
Tahu apa itu istilah Coffee Decoration ?
Web Services
IntroduksiPPP Introduksi
PPP
Web Services
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
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
Decorator
PPP
Web Services
Decorator
Tujuan
“Melampirkan” tanggung jawab tambahan pada sebuah objek secara dinamis
Memberikan alternatif untuk melakukan penurunan kelas yang lebih fleksibel dengan tujuan memperluas fungsionalitasnya
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
Web Services
Motivasi
Masih ingat dengan alur kerja peracikan kopi ?
Barista menyeduh kopi dari biji kopi jenis DarkRoast
“Mendekorasinya” dengan mocha
“Mendekorasinya” dengan krim
Memanggil fungsi cost() untuk menghitung harga dari minuman yang dipesan dengancara mengandalkan“proses pendelegasianmethod” untukmenghitung penambahanharga tiap bahancampuran
PPP
Web Services
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
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
Web Services
Struktur
PPP
Web Services
Unsur
Component
mendefinisikan antarmuka untuk objek yang dapat diberikan tanggung jawab tambahan secara dinamis
ConcreteComponent
mendefinisikan sebuah objek yang dapat diberikan tanggungjawab tambahan
Decorator
mempertahankan referensi ke objek Component danmendefinisikan sebuah antarmuka yang sesuai denganantarmuka Component tersebut
ConcreteDecorator
menambahkan tanggung jawab untuk komponen tertentu
PPP
Web Services
Konsekuensi
Kolaborasi
Dekorator meneruskan permintaan ke objek Component nya
Bisa jadi dekorator dapat melakukan operasi tambahansebelum dan setelah meneruskan permintaan (secara opsional)
Konsekuensi
(+) Lebih fleksibel daripada pewarisan statis menambahkanproperti 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
Web Services
Implementasi
Kesesuaian Antarmuka
Antarmuka objek dekorator harus sesuai dengan antarmukakomponen yang akan dia dekorasi
“Menghilangkan” klas Decorator abstrak
Tidak perlu mendefinisikan klas dekorator abstrak ketika kitahanya perlu menambahkan satu tanggung jawab
Menjaga klas Component tetap ringan
Untuk memastikan antarmuka tetap sesuai, komponen dandekorator harus diturunkan dari klas Component umum
Sangat penting untuk menjaga klas umum ini tetap ringan, yaituharus fokus pada pendefinisian antarmuka, bukan padapenyimpanan data
PPP
Contoh kode
PPP
Web Services
Contoh Kode
PPP
Web Services
Contoh Kode
PPP
Web Services
Contoh Kode
PPP
Web Services
Contoh Kode
PPP
Web Services
Contoh Kode
PPP
Web Services
Contoh Kode
PPP
Web Services
Contoh Kode
Web Services
Terimakasih
v^^
PPP
I’m with you tillthe end of the line