Design Pattern Creational Pattern Factory Method, Abstract Factory, Singleton Adam Hendra Brata
PPP Tujuan Perkuliahan Memahami creational pattern : Factory Method Memahami creational pattern : Abstract Factory Memahami creational pattern : Singleton
PPP Peringatan Mulai dari sini, seluruh peserta mata kuliah PPP akan mempelajari jenis jenis PPP berdasarkan kategorisasi GoF Diperlukan kemampuan pemrograman yang mumpuni serta pemahaman tentang pemodelan dan pemrograman berorientasi objek yang cukup baik
PPP Factory Method
PPP Factory Method Tujuan Mendefinisikan antarmuka untuk menciptakan sebuah objek, tetapi membiarkan subklas yang memutuskan klas mana yang akan diinstansiasi Factory Method memungkinkan sebuah pendelegasian tanggung jawab instansiasi sebuah klas tertentu oleh subklas Juga dikenal sebagai: Virtual Constructor
PPP Factory Method Motivasi (1) Bagaimana agar bisa membuat pizza lebih dari satu jenis? Digunakan Abstract class atau Interface? Design should be open for extension but closed for modification
PPP Factory Method Motivasi (2) Sekarang kita lewatkan tipe pizza ke method orderpizza Berdasarkan tipe pizza, kita instansiasi concrete class yang sesuai dan kita masukkan pada variabel instance dari pizza Setiap pizza disini harus mengimplementasikan interface Pizza Kemudian setelah kita memiliki objek Pizza, maka akan disiapkan agar siap dimasak, dipotong kemudian mungkin akan dibungkus Setiap subtipe dari Pizza, seperti CheesePizza, VeggiePizza dll. mengetahui cara untuk mempersiapkan dirinya sendiri
PPP Factory Method Motivasi (3) Ini merupakan bagian yang menjelaskan tentang setiap tipe pizza yang ada, misalkan jika ada perubahan tipe maka kita harus merubahnya terus menerus sesuai dengan perubahan tersebut Bagaimana jika ada perubahan jenis pizza? Harus membuka hard code? Kemudian bagian ini akan selalu sama setiap waktu, karena proses persiapan, memasak dan pembungkusan akan selalu sama setiap waktu Sehingga kode bagian ini tidak akan berubah
PPP Factory Method Motivasi (4) Kemudian agar lebih efisien kita coba untuk memisahkan kode dengan cara menarik keluar kode untuk proses pembuatan objek dari method orderpizza Pizza Factory
PPP Factory Method Motivasi (5) Class terpisah
PPP Factory Method Motivasi (6) Sekarang kita buat reference dari klas Pizza Store ke klassimplepizzafactory PizzaStore mendapatkan informasi factory yang dilewatkan melalui konstruktornya Dan method orderpizza() digunakan oleh factory untuk membuat pizza dengan cara yang sederhana, hanya dengan melewatkan tipenya saja Sebagai catatan, kita sudah mengganti operator baru dengan cara membuat method pada objek factory, sehingga tidak perlu lagi ada instansiasi klas konkrit disini
PPP Factory Method Pemakaian / Applicability Sebuah klas tidak dapat mengantisipasi objek dari klas mana yang harus diinstansiasi Sebuah klas ingin subklasnya yang mempunyai tanggung jawab untuk menentukan objek mana yang klas tersebut harus ciptakan Klas mendelegasikan tanggung jawab tersebut pada salah satu dari beberapa subklas pembantu Kemudian kita sendiri ingin melokalisasi (menemukan) pengetahuan subklas pembantu mana yang dimaksud atau subklas pembantu mana yang menjadi delegasi tersebut
PPP Factory Method Struktur Semua product harus mengimplementasikan interface yang sama sehingga klas yang yang ingin menggunakan product dapat berkomunikasi dengan antarmukanya, bukan ke klas konkrit secara langsung Klas ConcreteCreator inilah yang bertanggung jawab untuk membuat 1 atau lebih concrete product Ini adalah satu-satunya klas yang memiliki pengetahuan tentang bagaimana cara membuat product Creator adalah klas yang berisi implementasi dari semua method yang dapat memanipulasi product, selain untuk method dari factory Method abstrak factorymethod() yang harus diimplementasikan oleh setiap subklas Klas ConcreteCreator yang mengimplementasikan method factorymethod(), yang sebenarnya adalah method yang memproduksi product
PPP Factory Method Partisipan / Penyusun Product mendefinisikan antarmuka dari objek yang diciptakan oleh factory method Concrete Product mengimplementasikan antarmuka product Creator Mendefinisikan factory method yang mengembalikan objek berupa jenis dari produk dapat berisi implementasi standar dari factory method bergantung pada subklasnya untuk mendefinisikan factory method sehingga dapat mengembalikan sebuah instance dari ConcreteProduct yang sesuai ConcreteCreator Meng-override factory method untuk dapat mengembalikan instance dari ConcreteProduct
PPP Factory Method Kolaborasi Creator bergantung pada subklasnya untuk mendefinisikan factory method sehingga mengembalikan sebuah instance dari ConcreteProduct yang tepat Konsekuensi Factory menghilangkan kebutuhan untuk mengikat kelas khusus dari aplikasi (application specific classes) ke dalam kode kita hanya berkaitan dengan antarmuka Product, sehingga dapat bekerja dengan beragam klas ConcreteProduct yang ditetapkan pengguna Kelemahan potensialnya adalah klien mungkin harus melakukan penurunan klas Creator terlebih dahulu hanya untuk membuat objek ConcreteProduct tertentu
PPP Factory Method Implementasi Ada 2 variasi yang dapat dilakukan Creator adalah klas abstrak dan tidak menyediakan implementasi untuk factory method membutuhkan sub-klas untuk mendefinisikan implementasinya, tetapi kita tidak perlu menginstansiasi klas yang sifatnya tidak terduga Creator adalah kelas konkrit dan menyediakan implementasi default untuk factory method Creator menggunakan factory method terutama untuk isu fleksibilitas, yang memungkinkan subklas mengubah kelas dari objek yang kelas parentnya diinstansiasi jika diperlukan
PPP Factory Method Implementasi Factory method dengan parameter Membuat beberapa jenis product berdasarkan parameter yang diberikan Semua objek yang diciptakan oleh factory method menciptakan berbagi antarmuka Product yang sama class Creator { Product FactoryMethod(ProductID id){ if(id==mine) return new MyProduct(); if(id==yours) return new YourProduct(); } }
PPP Factory Method Contoh Kode (1)
PPP Factory Method Contoh Kode (2)
PPP Factory Method Contoh Kode (3)
PPP Factory Method Contoh Kode (4)
PPP Factory Method Contoh Kode (5)
PPP Factory Method Contoh Kode (6)
PPP Factory Method Contoh Kode (7)
PPP Abstract Factory
PPP Abstract Factory Tujuan Mendefinisikan sebuah antarmuka untuk menciptakan 1 rumpun objek yang sifatnya saling terkait atau saling tergantung tanpa menspesifikkan kelas konkritnya Juga dikenal sebagai Kit Motivasi Pertimbangkan pizza yang diproduksi oleh toko yang berbeda Setiap pizza harus memiliki bahan-bahan berkualitas baik sesuai dengan toko masing-masing toko yang berbeda memiliki bahan bahan yang berbeda juga Untuk menjadi lebih portabel di toko yang berbeda, pizza seharusnya tidak di hard-code untuk bahan dari toko tertentu
PPP Abstract Factory Sebuah sistem harus independen dari bagaimana produk tersebut dibuat, disusun dan direpresentasikan Sebuah sistem harus dapat dikonfigurasi dengan salah satu dari beberapa produk yang serumpun Produk produk yang serumpun ini dirancang untuk dapat digunakan bersama-sama, dan kita perlu untuk memastikan hal ini Kita ingin menyediakan pustaka klas dari produk tersebut dan kita hanya ingin mengungkap antarmukanya saja, bukan implementasinya
PPP Abstract Factory Struktur
PPP Abstract Factory Partisipan / Penyusun AbstractFactory mendefiniskan sebuah antarmuka untuk operasi-operasi yang bertujuan membuat objek produk abstrak ConcreteFactory mengimplementasikan operasi untuk menciptakan ConcreteProduct AbstractProduct mendefinisikan sebuah antarmuka untuk 1 jenis produk ConcreteProduct Client mendefinisikan objek produk yang akan dibuat oleh ConcreteFactory tertentu mengimplementasikan antarmuka AbstractProduct hanya dapat menggunakan antarmuka yang didefinisikan oleh AbstractFactory dan AbstractProduct
PPP Abstract Factory Kolaborasi Biasanya satu instance dari klas ConcreteFactory dibuat pada saat run-time ConcreteFactory diimplementasikan sebagai Singleton Pabrik abstrak mendelegasikan proses penciptaan objek produk kepada sub-klas ConcreteFactory, dengan menggunakan pola Factory Method Imeplementasi Factory sebagai Singleton sebuah aplikasi biasanya hanya membutuhkan satu instance dari ConcreteFactory per 1 rumpun keluarga produk Singleton Membuat Product : Abstract Factory hanya mendefinisikan sebuah antarmuka untuk proses penciptaan produk semuanya terserah atau diserahkan pada kepada sub-klas ConcreteProduct untuk benarbenar membuat Product tersebut
PPP Abstract Factory Konsekuensi AbstractFactory dapat mengisolasi klas-klas Ini membantu kita untuk mengontrol kelas objek yang diciptakan oleh aplikasi Ini dapat mengisolasi Client untuk mengakses implementasi dari klas dan memanipulasinya langsung, Client hanya dapat berkomunikasi dengan klas-klas tersebut melalui antarmuka abstrak yang sudah didefinisikan Hal ini membuat pertukaran antar rumpun produk yang masih sekeluarga menjadi lebih mudah klas ConcreteFactory hanya muncul sekali dalam aplikasi Hal ini membuat perubahan pada ConcreteFactory yang digunakan oleh aplikasi menjadi lebih mudah Hal ini dapat membuat penggunaan konfigurasi produk yang berbeda menjadi lebih mudah karena hanya dengan mengubah ConcreteFactory-nya saja
PPP Abstract Factory Konsekuensi Mempromosikan konsistensi antar produk Ketika serumpun keluarga objek produk dirancang untuk dapat bekerja sama, maka yang perlu diingat adalah bahwa aplikasi hanya dapat menggunakan satu keluarga pada suatu waktu Dukungan untuk produk jenis baru menjadi agak sulit Memperluas tugas AbstractFactory untuk menghasilkan jenis produk baru menjadi sangat sulit karena antarmuka AbstractFactory adalah tetap dan pasti hanya untuk serangkaian produk yang sudah didefinisikan sebelumnya Dukungan terhadap produk baru membutuhkan proses memperluas antarmuka Factory, yang juga harus mengubah kelas AbstractFactory dan semua subklas ConcreteFactory
PPP Abstract Factory Contoh Kode (1)
PPP Abstract Factory Contoh Kode (2)
PPP Abstract Factory Contoh Kode (3)
PPP Abstract Factory Contoh Kode (4)
PPP Abstract Factory Perbandingan Abstract Factory dan Factory Method AbstractFactory Creator ConcreteFactory ConcreteCreator AbstractProduct Product Product ConcreteProduct
PPP Singleton
PPP Singleton Tujuan Memastikan sebuah klas hanya dapat memiliki satu instance dan memberikan titik akses global padanya Motivasi: Beberapa kelas harus memiliki tepat satu instance (satu spooler cetak, satu sistem file, satu window manager) Bagaimana kita memastikan bahwa sebuah klas hanya dapat memiliki satu instance yang mudah diakses? Sebuah variabel global membuat sebuah objek mudah diakses namun tidak dapat melarang instansiasi lebih dari 1 objek Klas itu sendirilah yang harus bertanggung jawab untuk melacak instance yang dihasilkan oleh klas tersebut
PPP Singleton Pemakaian Harus ada tepat satu instance dari klas dan objek hasil instansiasi tersebut harus dapat diakses oleh klien dari jalur akses biasa Ketika satu-satunya instance tersebut harus diperluas oleh subklasnya maka klien harus dapat menggunakan instance yang sudah diperluas tersebut tanpa harus memodifikasi kodenya
PPP Singleton Struktur
PPP Singleton Partisipan / Penyusun Singleton Kolaborasi Mendefinisikan sebuah instance yang memungkinkan klien mengakses antarmukanya yang unik Instance adalah sebuah kelas operasi (static di Java) Bertanggung jawab untuk menciptakan instance yang unik Client Mengakses instance Singleton hanya melalui method Instance()
PPP Singleton Konsekuensi Akses terkontrol ke instance tunggal Karena klas Singleton mengenkapsulasi instancenya maka dia memiliki kontrol yang ketat atas bagaimana dan kapan klien harus mengaksesnya Mengurangi name space Pola Singleton adalah perbaikan dari variabel global menghindari penggunaan name space dari variabel global yang menyimpan instance tunggal Memudahkan proses representasi operasi Klas Singleton dapat di-inheritance dengan sangat mudah, dan jika ingin mengkonfigurasi aplikasi yang menggunakan instance dari klas yang diperluas ini kita dapat mengkonfigurasi aplikasi hanya dengan sebuah instance dari klas yang kita butuhkan pada saat run-time Memungkinkan adanya variable number of instances pola ini memudahkan jika kita ingin punya lebih dari satu instance dari kelas Singleton
PPP Singleton Contoh Kode
PPP Terimakasih v^^ Web Services I m with you till the end of the line