creational pattern - adamhendrabrata.files.wordpress.com · setiap pizza harus memiliki bahan-bahan...
TRANSCRIPT
Creational
Pattern
Factory Method, Abstract
Factory, Singleton
Design
Pattern
Adam Hendra Brata
PPP Tujuan Perkuliahan
Memahami creational pattern : Factory Method
Memahami creational pattern : Abstract Factory
Memahami creational pattern : Singleton
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 Peringatan
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)
PPP Factory Method
Design should be “open for extension but closed for modification”
Bagaimana agar bisa membuat pizza lebih dari satu jenis ? Digunakan Abstract class atau Interface ?
Motivasi (2)
PPP Factory Method
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
Motivasi (3)
PPP Factory Method
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
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
Bagaimana jika ada perubahan jenispizza ? Harus “membuka” hard code ?
Motivasi (4)
PPP Factory Method
Kemudian agar lebih efisien kita coba untuk “memisahkan” kode dengan cara menarik keluar kode untuk proses pembuatan objek dari method orderPizza
Pizza Factory
Motivasi (5)
PPP Factory Method
Class terpisah
Motivasi (6)
PPP Factory Method
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 methodpada objek factory, sehingga tidak perlu lagi ada instansiasi klas konkrit disini
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
PPP Factory Method
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
Klas ConcreteCreator inilah yang bertanggung jawab untuk membuat 1 atau lebih concrete productIni adalah satu-satunya klas yang memiliki pengetahuan tentang bagaimana cara membuat product
Semua product harus mengimplementasikan interface yang sama sehingga klas yang yang ingin menggunakan product dapat berkomunikasi dengan antarmukanya, bukan ke klas konkrit secara langsung
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 sub-klas 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
PPP Factory Method
class Creator {
Product FactoryMethod(ProductID id){
if(id==MINE) return new MyProduct();
if(id==YOURS) return new YourProduct();
}
}
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 Factory Method
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
mendefinisikan objek produk yang akan dibuat oleh ConcreteFactory tertentu
mengimplementasikan antarmuka AbstractProduct
Client
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 benar-benar 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 Abstract Factory
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
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
Kolaborasi
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 Singleton
Web Services
Terimakasih
v^^
PPP
I’m with you tillthe end of the line