• Tidak ada hasil yang ditemukan

Design. Creational. Pattern. Adam Hendra Brata. Factory Method, Abstract Factory, Singleton

N/A
N/A
Protected

Academic year: 2021

Membagikan "Design. Creational. Pattern. Adam Hendra Brata. Factory Method, Abstract Factory, Singleton"

Copied!
45
0
0

Teks penuh

(1)

Creational

Pattern

Factory Method, Abstract

Factory, Singleton

D

esign

P

attern

(2)

PPP

Tujuan Perkuliahan

Memahami creational pattern : Factory Method

Memahami creational pattern : Abstract Factory

(3)

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

(4)

PPP

Factory

Method

(5)

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

(6)

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 ?

(7)

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

(8)

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 jenis pizza ? Harus “membuka” hard code ?

(9)

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

(10)

Motivasi (5)

PPP

Factory Method

(11)

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 method

pada objek factory, sehingga tidak perlu lagi ada instansiasi klas konkrit disini

(12)

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

(13)

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 product

Ini 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

(14)

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

(15)

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

(16)

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

(17)

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();

}

(18)

Contoh Kode (1)

(19)

Contoh Kode (2)

(20)

Contoh Kode (3)

(21)

Contoh Kode (4)

(22)

Contoh Kode (5)

(23)

Contoh Kode (6)

(24)

Contoh Kode (7)

(25)

PPP

Abstract

Factory

(26)

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

(27)

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

(28)

Struktur

(29)

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

(30)

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

(31)

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

(32)

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

(33)

Contoh Kode (1)

(34)

Contoh Kode (2)

(35)

Contoh Kode (3)

(36)

Contoh Kode (4)

(37)

Perbandingan Abstract Factory dan Factory Method

AbstractFactory

Creator

ConcreteFactory

ConcreteCreator

AbstractProduct

Product

Product

ConcreteProduct

PPP

Abstract Factory

(38)

PPP

(39)

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

(40)

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

(41)

Struktur

(42)

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()

(43)

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

(44)

Contoh Kode

(45)

Web Services

Terimakasih

v^^

PPP

I’m with you till

Referensi

Dokumen terkait

Berapa persentase dan perbandingan rata-rata komponen biaya obat analgesik dibandingkan biaya obat secara keseluruhan pada pasien Benign Prostatic Hyperplasia yang

Kebijakan puritanisme oleh sultan Aurangzeb dan pengislaman orang-orang Hindu secara paksa demi menjadikan tanah India sebagai negara Islam, dengan menyerang berbagai praktek

Skala tidur sering digunakan untuk mengetahui kuantitas dari derajat gangguan tidur pada seorang pasien sleep apnea .PenyakitObstructive Sleep Apnea(OSA) menggambarkan

Berdasarkan hasil penelitian dan analisis yang telah dilakukan motif sebab (because to motive) dari tindakan perempuan menggugat cerai suaminya yakni karena

Lukisan berjudul Women III adalah merupakan hasil karya yang dibuat oleh seniman yang menganut aliran lukisan abstrak ekspresionis willem de Kooning dan merupakan salah satu

After analyzing the data, the writer found the moves distribution of teacher and students talk in micro teaching class by sixth semester students of English Education

p ula dijumpai ungkapan atau sebutan “tidak berkepribadian”. Dari uraian tersebut bisa diperoleh gambaran bahwa kepribadian, menurut pengertian sehari-hari, menunjuk kepada

a) Berlandaskan pada etika dan nilai-nilai demokrasi yang berlaku. b) Merupakan keseluruhan sistem nilai dan gagasan dalam kehidupan.. demokrasi. c) Berlandaskan pada