يقدم
على غرار وضع الإنشاء ، عند إنشاء كائن (يعتبر منتجًا في المصنع) ، ليست هناك حاجة لتحديد الفئة المحددة لإنشاء الكائن.
يحدد نمط المصنع واجهة لإنشاء كائنات ، ويتم تحديد هذه الواجهة بواسطة الفئة الفرعية لتثبيت الفئة. هذا النمط يؤخر تثبيت الفصل إلى فئة فرعية. يمكن للفئات الفرعية تجاوز أساليب الواجهة وذلك لتحديد نوع الكائن الخاص بها عند إنشائها.
يعد هذا الوضع مفيدًا للغاية ، خاصة عند إنشاء مهام العملية للكائنات ، مثل الاعتماد على العديد من ملفات الإعدادات. أيضًا ، سترى غالبًا طرق المصنع في برنامجك لجعل فئة الفئة الفرعية تحدد نوع الكائن الذي يجب إنشاؤه.
نص
في المثال التالي ، نسخة محسّنة من رمز نمط المنشئ في الفصل 26 باستخدام طريقة المصنع:
نسخة الكود كما يلي:
var car = (function () {
var car = function (model ، year ، miles) {
this.model = نموذج ؛
هذا.
this.miles = miles ؛
} ؛
وظيفة الإرجاع (النموذج ، السنة ، الأميال) {
إرجاع سيارة جديدة (نموذج ، سنة ، ميل) ؛
} ؛
}) () ؛
Var Tom = New Car ("Tom" ، 2009 ، 20000) ؛
var dudu = سيارة جديدة ("Dudu" ، 2010 ، 5000) ؛
إذا كان من الصعب فهمها ، فلنقدم مثالًا آخر:
نسخة الكود كما يلي:
var productManager = {} ؛
ProductManager.CreateProducta = function () {
console.log ('Producta') ؛
}
ProductManager.CreateProductB = function () {
console.log ('ProductB') ؛
}
ProductManager.Factory = function (typeType) {
إرجاع New ProductManager [typetype] ؛
}
ProductManager.Factory ("CreateProducta") ؛
إذا لم نفهمها بعد ، فلنكن أكثر تفصيلاً. إذا أردنا إدراج بعض العناصر في صفحة الويب ، ولم يتم إصلاح هذه العناصر في أنواع ، فقد تكون صورًا أو اتصالات أو حتى نص. وفقًا لتعريف نمط المصنع ، نحتاج إلى تحديد فئة المصنع والفئة الفرعية المقابلة. دعونا أولاً نحدد التنفيذ المحدد للفئة الفرعية (أي الوظيفة الفرعية):
نسخة الكود كما يلي:
var page = page || {} ؛
page.dom = page.dom || {} ؛
// وظائف فرعية 1: معالجة النص
page.dom.text = function () {
this.insert = function (أين) {
var txt = document.createTextNode (this.url) ؛
Where.AppendChild (txt) ؛
} ؛
} ؛
// Subfunction 2: رابط المعالجة
page.dom.link = function () {
this.insert = function (أين) {
var link = document.createElement ('a') ؛
link.href = this.url ؛
link.appendChild (document.createTextNode (this.url)) ؛
Where.AppendChild (Link) ؛
} ؛
} ؛
// Subfunction 3: معالجة الصور
page.dom.image = function () {
this.insert = function (أين) {
var im = document.createElement ('img') ؛
im.src = this.url ؛
Where.AppendChild (im) ؛
} ؛
} ؛
إذن كيف نحدد وظائف معالجة المصنع؟ الأمر بسيط للغاية في الواقع:
نسخة الكود كما يلي:
page.dom.factory = function (type) {
إرجاع صفحة جديدة. [type] ؛
}
كيفية استخدامه على النحو التالي:
نسخة الكود كما يلي:
var o = page.dom.factory ('link') ؛
O.URL = 'http://www.cnblogs.com' ؛
O.Insert (document.body) ؛
في هذه المرحلة ، أعتقد أن الجميع قد فهموا بالفعل إدخال نموذج المصنع ، لذلك لن أصفه بعد الآن.
لخص
متى تستخدم وضع المصنع
نموذج المصنع مفيد بشكل خاص في السيناريوهات التالية:
1. بناء الأشياء معقد للغاية
2. تحتاج إلى الاعتماد على البيئة المحددة لإنشاء مثيلات مختلفة
3. التعامل مع عدد كبير من الكائنات الصغيرة بنفس السمات
متى لا ينبغي استخدام وضع المصنع
لا تسيء استخدام نموذج المصنع ، وأحيانًا يضيف فقط التعقيد غير الضروري إلى الكود ، ويجعل من الصعب إجراء الاختبار.