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
Web Services
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
I’m with you till the end of the line