قبل قراءة هذه المقالة، يوصى بقراءة هذا المقال: الوضع الفردي لأنماط تصميم جافا سكريبت، بعد كل شيء، أشعر شخصيًا أنه من الأفضل المتابعة خطوة بخطوة.
ينقسم نمط المصنع إلى نمط مصنع بسيط ونمط مصنع معقد. يستخدم الأول فئة لإنشاء مثيل، وعادة ما يستخدم الأخير فئة فرعية لتحديد الفئة التي يمثل متغير العضو مثيلًا محددًا لها يحتوي المصنع على مصانع معقدة.
دعونا نتحدث عن هذا المصنع بالتفصيل من خلال مثال محدد.
يعد استخدام تقنية Ajax لبدء الطلبات غير المتزامنة مهمة شائعة في تطوير الويب اليوم.
1 // ينفذ AjaxHandler، وينشئ مصنعًا معقدًا لتنفيذ سلسلة من عمليات Ajax، والذي يحتوي على مصنعين بسيطين
2 var SimpleHandler = function(){};
3
4 SimpleHandler.prototype = {
5 // أول مصنع بسيط يقوم بإنشاء Ajax وطلبه وإرساله. . . انتظر
6 طلب:وظيفة(method,url,callback,postVars){
7 var xhr = this.createXhrObject();
8 xhr.onreadystatechange = function(){
9 if(xhr.readyState != 4) return;
10 (xhr.status == 200) ؟
11 //يتم تعريف رد اتصال الكائن العام لتنفيذ تطبيق معلمات الإرجاع
12 رد الاتصال. النجاح (xhr.responseText،xhr.responseXML):
13 callback.failure(xhr.status);
14}؛
15 xhr.open(method,url,true);
16 if(method != "POST") postVars = null;
17 xhr.send(postVars);
18}،
19 // يقوم المصنع البسيط الثاني بإنشاء كائنات XHR وفقًا لمواقف مختلفة، ويمكنه إرجاع كائن XHR صحيح بغض النظر عن الموقف.
20 إنشاءXhrObject:وظيفة(){
21 طرق فار = [
22 وظيفة () {إرجاع XMLHttpRequest () جديد؛}،
23 وظيفة () {إرجاع ActiveXObject الجديد ('Msxml2.XMLHttp')؛}،
24 وظيفة () {إرجاع ActiveXObject الجديد ('Microsoft.XMLHttp')؛}
25 ];
26 ل(var i = 0; i < 3; i++){
27 محاولة{
28 طريقة[i]();
29 }قبض(ه){
30 تواصل؛
31}
32 this.createXhrObject =methods[i]();
33 طريقة إرجاع[i]();
34}
35 رمي خطأ جديد("خطأ!");
36}
37 }
38
بالنظر إلى هذا، فإن نمط المصنع هو عمومًا امتداد وتطبيق للنمط الفردي، ويمكن استدعاء المثال أعلاه على النحو التالي:
1 نافذة.onload = وظيفة () {
2 var myHandler = new SimpleHandler();
رد الاتصال 3 فار = {
4 نجاح:وظيفة(responseText,responseXML){alert("Success:" + ResponseXML);},
5 فشل:وظيفة(رمز الحالة){alert("فشل" + رمز الحالة);}
6}؛
7 myHandler.request('GET','innerHTML.xml',callback);
8
9 };// بالطبع سيكون رد الاتصال مختلفًا حسب الموقف.
باستخدام نمط المصنع بدلاً من استخدام الكلمة الأساسية الجديدة والفئات المحددة، يمكنك مركزة كافة تعليمات المثيل البرمجية في مكان واحد.
باستخدام نمط المصنع، يمكنك أولاً إنشاء فئة أصل مجردة، ثم إنشاء أساليب مصنع في الفئة الفرعية، وبالتالي تأجيل إنشاء كائنات الأعضاء إلى فئات فرعية أكثر تخصصًا، والتي يمكن أن تمنع بشكل فعال تكرار التعليمات البرمجية.