memperkenalkan
Mirip dengan mode pembuatan, saat membuat objek (dianggap sebagai produk di pabrik), tidak perlu menentukan kelas spesifik untuk membuat objek.
Pola pabrik mendefinisikan antarmuka untuk membuat objek, dan antarmuka ini ditentukan oleh subkelas untuk membuat kelas yang mana. Pola ini menunda instantiasi kelas ke subclass. Subkelas dapat mengganti metode antarmuka untuk menentukan jenis objek mereka sendiri saat membuatnya.
Mode ini sangat berguna, terutama saat membuat penugasan proses untuk objek, seperti mengandalkan banyak file pengaturan. Juga, Anda akan sering melihat metode pabrik dalam program Anda untuk membuat kelas subkelas menentukan jenis objek yang perlu dibuat.
teks
Dalam contoh berikut, versi yang ditingkatkan dari kode pola konstruktor di Bab 26 menggunakan metode pabrik:
Salinan kode adalah sebagai berikut:
var car = (function () {
var car = fungsi (model, tahun, mil) {
this.model = model;
this.year = tahun;
this.miles = mil;
};
fungsi pengembalian (model, tahun, mil) {
mengembalikan mobil baru (model, tahun, mil);
};
}) ();
var tom = mobil baru ("Tom", 2009, 20000);
var dudu = mobil baru ("dudu", 2010, 5000);
Jika sulit dimengerti, mari kita berikan contoh lain:
Salinan kode adalah sebagai berikut:
var productManager = {};
ProductManager.createProducta = function () {
Console.log ('Producta');
}
ProductManager.createProductB = function () {
Console.log ('ProductB');
}
ProductManager.Factory = function (Typetype) {
mengembalikan ProductManager baru [Typetype];
}
ProductManager.Factory ("CreateProducta");
Jika kita belum memahaminya, maka mari kita lebih rinci. Jika kami ingin memasukkan beberapa elemen ke halaman web, dan elemen -elemen ini tidak diperbaiki dalam jenis, mereka mungkin gambar, koneksi, atau bahkan teks. Menurut definisi pola pabrik, kita perlu mendefinisikan kelas pabrik dan subclass yang sesuai. Pertama -tama mari kita tentukan implementasi spesifik dari subkelas (yaitu, subfungsi):
Salinan kode adalah sebagai berikut:
var page = halaman || {};
page.dom = page.dom || {};
// Subfungsi 1: Teks Pemrosesan
page.dom.text = function () {
this.insert = function (where) {
var txt = document.createTextNode (this.url);
where.appendchild (txt);
};
};
// Subfungsi 2: Tautan Pemrosesan
page.dom.link = function () {
this.insert = function (where) {
var link = document.createElement ('a');
link.href = this.url;
link.appendChild (document.createTextNode (this.url));
where.appendchild (tautan);
};
};
// Subfungsi 3: Memproses gambar
page.dom.image = function () {
this.insert = function (where) {
var im = document.createElement ('img');
im.src = this.url;
where.appendchild (im);
};
};
Jadi bagaimana kita mendefinisikan fungsi pemrosesan pabrik? Ini sebenarnya sangat sederhana:
Salinan kode adalah sebagai berikut:
page.dom.factory = function (type) {
mengembalikan halaman baru.dom [type];
}
Cara menggunakannya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var o = page.dom.factory ('link');
o.url = 'http://www.cnblogs.com';
o.insert (document.body);
Pada titik ini, saya percaya semua orang telah memahami pengenalan model pabrik, jadi saya tidak akan menjelaskannya lagi.
Meringkaskan
Kapan Menggunakan Mode Pabrik
Model pabrik sangat berguna dalam skenario berikut:
1. Konstruksi benda sangat kompleks
2. Anda harus mengandalkan lingkungan tertentu untuk membuat contoh yang berbeda
3. Tangani sejumlah besar benda kecil dengan atribut yang sama
Kapan seharusnya tidak menggunakan mode pabrik
Jangan menyalahgunakan model pabrik, kadang -kadang hanya menambahkan kompleksitas yang tidak perlu pada kode, dan membuatnya sulit untuk menjalankan tes.