This is default featured slide 1 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 2 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 3 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 4 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

This is default featured slide 5 title

Go to Blogger edit html and find these sentences.Now replace these sentences with your own descriptions.

Rabu, 04 April 2012

Abstract Factory

Abstract Factory Pattern (AFP) merupakan salah satu jenis Creational Pattern yang menangani mekanisme penciptaan obyek secara adaptif. AFP memberikan kemampuan pengenkapsulasian sekelompok factory dimana masing-masing factory memiliki “motif” khasnya. AFP menjadi sentral penentuan factory yang akan diinisialisasi sehingga product yang diciptakan dapat mewarisi behaviour yang sesuai dengan motif yang dipilih. Keistimewaan lain adalah product yang diciptakan terbebas dari pernyataan penciptaan concrete class secara langsung. Hal ini memberikan keuntungan yaitu AFP dapat mencegah coupling problem yang pasti terjadi apabila penciptaan obyek memakai operator new dalam bahasa OOP.
Abstract Factory PatternRahasia dibalik kemampuan AFP ini terletak pada penyediaan abstraksi terhadap factorydan product yang dihasilkan. Abstract factorymemberikan sekumpulan abstract method untuk menciptakan jenis product tertentu yang harus diimplementasikan oleh concrete factoryAbstract product memberikan abstraksi pada keluarga product yang berbeda motif dimana tentunya memiliki cara pengimplementasian yang berbeda pula. Istilah “motif” dalam paragraf-paragraf sebelumnya diartikan sebagai suatu themeatau corak khusus yang melekat pada suatuproduct. Untuk memperjelas, katakanlah terdapat suatu abstract factory bernama ToyFactory yang menyediakan fungsi penciptaan beberapa product (misalnya:createRaceCar() dan createCuteDoll()). Sistem kemudian menarik turunan ToysFactory karena adanya kebutuhan atas corak khusus tertentu, yaitu WoodenToyFactory dan ElectricToyFactory; dimana keduanya mampu menciptakan jenis mainan yang berbeda motif (seperti WoodenRaceCar dan WoodenCuteDoll; atau ElectricRaceCar dan ElectricCuteDoll). Wooden dan Electric adalah contoh dari motif yang dimaksudkan. Keberadaan motif umumnya yang menjadi pemicu pemanfaatan AFP dalam software design dimana setiap concrete factory mampu menciptakan berbagaiconcrete product tetapi dalam kesamaan satu jenis motif. Pada praktik pemakaian AFP, program client akan menginisialisasi suatu implementasi dari abstract factory dan kemudian menggunakan interface abstract product ketika ingin memperoleh atau bekerja dengan obyek konkrit product.
Factory Matrix
Dua hal yang perlu ada dalam memakai pattern ini adalah kehadiran product dan motif. Product tentunya berkaitan dengan object apa yang akan diciptakan oleh factory. Dan motif berkaitan dengan adanya kemungkinan product tersebut memiliki cara implementasi yang berbeda dilihat dari jenis teknologi atau alternatif implementasi lain yang membuatnya memiliki corak yang berbeda. Selain dua hal pokok tersebut, penggunaan pattern ini dimaksudkan untuk memberikan abstraksi saat menciptakan object sehingga membuatnya dapat independent terhadap program client. Untuk membantu merangkumnya dapat dipakaiFactory Matrix.
Factory Matrix
Gambar di atas memperlihatkan Factory Matrix dimana kepala-kolom menyatakan jenis motif dan kepala-baris menyatakan jenis product. Sebagai contoh kasus: ToysFactory memiliki dua jenis mainan (sebagaiproduct) yang dapat diciptakan yaitu Race Car dan Cute Doll. Padanya juga terdapat dua jenis motif yang ingin diterapkan untuk kedua jenis mainan tersebut yaitu Wooden dan Electric. Sel tempat pertemuan antara kolom dan baris merupakan concrete object dari satu jenis motif product mainan, contoh: WoodenRaceCar atau ElectricCuteDoll. Tentunya di setiap concrete object ini memiliki cara implementasi dari abstract behaviour yang berbeda-beda. Dari matriks ini kemudian dapat dipetakan ke class diagram dimana product akan menjadi AbstractProduct dan motif akan menjadi ConcreteFactoryLihat hasil pemetaan Factory Matrix ToysFactory ke UML class diagram.


berikut contoh penerapannya di php.
1
2
3abstract class Laptop_Factory
4{
5    abstract function netbook();
6    abstract function notebook();
7}
8
9class Asus_Factory extends Laptop_Factory
10{
11    function netbook()
12    {
13        return new Tipe_Netbook("Asus");
14    }
15    function notebook()
16    {
17        return new Tipe_Notebook("Asus");
18    }
19}
20
21class Acer_Factory extends Laptop_Factory
22{
23    function netbook()
24    {
25        return new Tipe_Netbook("Acer");
26    }
27    function notebook()
28    {
29        return new Tipe_Notebook("Acer");
30    }
31}
32
33abstract class Laptop_Tipe_Merk
34{
35    abstract function ambil_tipe();
36    abstract function ambil_merk();
37}
38
39class Tipe_Netbook extends Laptop_Tipe_Merk
40{
41    public $merk;
42    public $tipe = "Netbook";
43    function __construct($merk) {
44        $this->merk = $merk;
45    }
46
47    public function ambil_tipe()
48    {
49        return $this->tipe;
50    }
51
52    public function ambil_merk()
53    {
54        return $this->merk;
55    }
56}
57
58class Tipe_Notebook extends Laptop_Tipe_Merk
59{
60    public $merk;
61    public $tipe = "Notebook";
62    function __construct($merk) {
63        $this->merk = $merk;
64    }
65
66    public function ambil_tipe()
67    {
68        return $this->tipe;
69    }
70
71    public function ambil_merk()
72    {
73        return $this->merk;
74    }
75}
76
77class Pilihan_Konsumen
78{
79
80    public static function Create_Laptop_Factory($factoryName)
81    {
82        switch($factoryName)
83        {
84            case "Acer" :
85                return new Acer_Factory();
86                break;
87            case "Asus" :
88                return new Asus_Factory();
89                break;
90        }
91    }
92}
93
94class Tampilkan
95{
96    function __construct($nama_merk)
97    {
98        $fc = Pilihan_Konsumen::Create_Laptop_Factory($nama_merk);
99        $netbook = $fc->netbook();
100        $notebook = $fc->notebook();
101        print_r($netbook);
102        echo '
'
;
103        print_r($notebook);
104        echo '

'
;
105    }
106}
107
108new Tampilkan("Asus");
109new Tampilkan("Acer");
110
111?>

Factory Method

Factorymethod

Static Factory Method dan Contoh Penggunaannya

Kita sebagai programmer Java sering sekali langsung menggunakan operator new untuk melakukan konstruksi dan inisialisasi class kita menjadi object. Kita bisa menggunakan cara lain, yaitu dengan factory method.


Apa sebenarnya fungsi operator new ?


Dengan bahasa yang sangat teknis maka fungsi operator new adalah melakukan konstruksi dan inisialisasi class kita dengan melakukan alokasi memori untuk objek baru dan mengembalikan referensi memori dari objek tersebut. Operator ini juga akan menjalankan metode constructor.


Constructor sendiri adalah method yang namanya sama dengan nama class yang kita definisikan. Contoh penggunaan constructor dan operator new adalah seperti pada listing kedua class Java di bawah ini.


RowData.java
  1. import java.text.SimpleDateFormat;  
  2. import java.util.Date;  
  3.   
  4.   
  5. public class RowData {  
  6. private int numberOfFields;  
  7. private Date currentDate;  
  8.   
  9. public RowData() {  
  10. this.numberOfFields = 0;  
  11.   
  12. currentDate = new Date();  
  13. }  
  14.   
  15. public void printCurrentDate()  
  16. {  
  17. SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");  
  18. System.out.println(df.format(currentDate));  
  19. }  
  20.   
  21. }  


InstantiateRowData .java
  1. public class InstantiateRowData {  
  2.   
  3. public static void main(String[] args)  
  4. {  
  5. /* 
  6.  ********************************** 
  7.  *  Konstruksi objek 
  8.  *  dengan memanggil operator new 
  9.  *  secara langsung dari luar class 
  10.  ********************************** 
  11.  */  
  12. RowData c = new RowData();  
  13.   
  14. c.printCurrentDate();  
  15. }  
  16. }  


Factory Method

Factory method adalah method yang memiliki fungsi khusus untuk melakukan konstruksi class menjadi objek dan mengembalikan referensi objek tersebut.

Method ini harus bersifat static dan ditempelkan ke dalam class tersebut. Dan untuk menjamin bahwa kita tidak akan bisa melakukan konstruksi langsung maka secara eksplisit method constructor harus diubah diberi akses private.

Lihatlah kedua class setelah diubah konstruksinya.

RowData.java
  1. import java.text.SimpleDateFormat;  
  2. import java.util.Date;  
  3.   
  4.   
  5. public class RowData {  
  6. private int numberOfFields;  
  7. private Date currentDate;  
  8.   
  9. private RowData() {  
  10. this.numberOfFields = 0;  
  11.   
  12. currentDate = new Date();  
  13. }  
  14.   
  15. public static RowData getRowData()  
  16. {  
  17. return new RowData();  
  18. }  
  19.   
  20. public void printCurrentDate()  
  21. {  
  22. SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");  
  23. System.out.println(df.format(currentDate));  
  24. }  
  25.   
  26. }  

Perhatikan di baris 9 bahwa constructor kita telah diberi akses private dari yang sebelumnya bersifat publicsehingga operator new tidak mungkin dapat mencapainya lagi dari luar class RowData. Kita menggantikannya dengan suatu method static getRowData() yang bersifat public. Di dalam method ini kita kembali melakukan konstruksi objek dengan operator new.


InstantiateRowData.java
  1. public class InstantiateRowData {  
  2.   
  3. public static void main(String[] args)  
  4. {  
  5. /* 
  6.  ********************************** 
  7.  *  Konstruksi objek 
  8.  *  dengan memanggil 
  9.  *      factory method 
  10.  ********************************** 
  11.  */  
  12. RowData c = RowData.getRowData();  
  13.   
  14. c.printCurrentDate();  
  15. }  
  16. }  
Kegunaan Factory Method


Walaupun kelihatan sangat sederhana, tetapi apabila kita sudah makin mahir dalam melakukan coding di Java dan menangani proyek yang makin lama skalanya semakin besar maka akan ada kebutuhan untuk membuat aplikasi yang bersifat concurrent atau yang bersifat parallel multi threading. Kondisi ini membuat kita membutuhkan teknik coding yang makin kompleks dan sophisticated. Salah satunya adalah menghindarkan konstruksi objek setengah jadi (half-constructed object) yang dapat terekspos melalui methodconstructor. Dan ini bisa dipecahkan dengan sangat baik melalui teknik factory method ini.


Selain itu factory method ini juga sudah menjadi bagian dari design pattern yang merupakan kumpulan pola coding yang bisa digunakan kembali sesuai kasus atau reusable.


Download File-file Contoh


Ok, buat Anda yang malas mengetik lagi atau tidak ada editor memadai dan ingin kompilasi langsung dan lihat efeknya silahkan download file-file contohnya di sini.