Sebelum membaca artikel ini, disarankan untuk membaca artikel ini: Mode Singleton Pola Desain JavaScript. Bagaimanapun, saya pribadi merasa lebih baik melanjutkan langkah demi langkah.
Pola pabrik dibagi menjadi pola pabrik sederhana dan pola pabrik kompleks. Yang pertama menggunakan kelas untuk menghasilkan sebuah instance, biasanya sebuah instance tunggal. Yang terakhir menggunakan subkelas untuk menentukan kelas mana yang merupakan instance spesifik dari variabel anggota pabrik terdapat di pabrik-pabrik yang kompleks.
Mari kita bahas pabrik ini secara detail melalui contoh spesifik.
Menggunakan teknologi Ajax untuk memulai permintaan asinkron adalah tugas umum dalam pengembangan web saat ini.
1 //implements AjaxHandler, membuat pabrik kompleks untuk menjalankan serangkaian proses Ajax, yang berisi dua pabrik sederhana
2 var SimpleHandler = fungsi(){};
3
4 SimpleHandler.prototipe = {
5 //Pabrik sederhana pertama melakukan pembuatan, permintaan, dan pengiriman Ajax. . . Tunggu
6 permintaan:fungsi(metode,url,panggilan balik,postVars){
7 var xhr = ini.createXhrObject();
8 xhr.onreadystatechange = fungsi(){
9 if(xhr.readyState != 4) kembali;
10 (xhr.status == 200) ?
11 //Panggilan balik objek global didefinisikan untuk melakukan penerapan parameter pengembalian
12 panggilan balik.sukses(xhr.responseText,xhr.responseXML):
13 panggilan balik.kegagalan(xhr.status);
14};
15 xhr.open(metode,url,benar);
16 if(metode != "POST") postVars = null;
17 xhr.send(postVars);
18},
19 //Pabrik sederhana kedua membuat objek XHR sesuai dengan situasi yang berbeda. Pabrik ini dapat mengembalikan objek XHR yang benar, apa pun situasinya.
20 buatXhrObject:fungsi(){
21 metode var = [
22 fungsi(){kembalikan XMLHttpRequest();} baru,
23 fungsi(){kembalikan ActiveXObject baru('Msxml2.XMLHttp');},
24 fungsi(){kembalikan ActiveXObject baru('Microsoft.XMLHttp');}
25 ];
26 untuk(var saya = 0; saya < 3; saya++){
27 mencoba{
28 metode[i]();
29 }menangkap(e){
30 lanjutkan;
31}
32 this.createXhrObject = metode[i]();
33 metode pengembalian[i]();
34}
35 melempar Kesalahan baru("Kesalahan!");
36}
37 }
38
Melihat hal tersebut, pola pabrik pada umumnya merupakan perluasan dan penerapan lebih lanjut dari pola tunggal.
1 jendela.onload = fungsi(){
2 var myHandler = SimpleHandler baru();
3 panggilan balik var = {
4 sukses:fungsi(responseText,responseXML){alert("Sukses:" + responXML);},
5 kegagalan:fungsi(statusCode){alert("Kegagalan" + statusCode);}
6};
7 myHandler.request('GET','innerHTML.xml',callback);
8
9 };//Tentu saja, panggilan baliknya akan berbeda tergantung situasinya.
Dengan menggunakan pola pabrik alih-alih menggunakan kata kunci baru dan kelas konkret, Anda dapat memusatkan semua kode instance di satu lokasi.
Dengan menggunakan pola pabrik, pertama-tama Anda dapat membuat kelas induk abstrak, lalu membuat metode pabrik di subkelas, sehingga menunda pembuatan instance objek anggota ke subkelas yang lebih terspesialisasi, yang secara efektif dapat mencegah duplikasi kode.