แนะนำ
คล้ายกับโหมดการสร้างเมื่อสร้างวัตถุ (ถือเป็นผลิตภัณฑ์ในโรงงาน) ไม่จำเป็นต้องระบุคลาสเฉพาะเพื่อสร้างวัตถุ
รูปแบบโรงงานกำหนดอินเทอร์เฟซสำหรับการสร้างวัตถุและอินเทอร์เฟซนี้จะถูกกำหนดโดยคลาสย่อยเพื่อยกตัวอย่างคลาส รูปแบบนี้จะทำให้การสร้างอินสแตนซ์ของคลาสเป็นคลาสย่อย คลาสย่อยสามารถแทนที่วิธีการอินเทอร์เฟซเพื่อระบุประเภทวัตถุของตัวเองเมื่อสร้าง
โหมดนี้มีประโยชน์มากโดยเฉพาะอย่างยิ่งเมื่อสร้างการกำหนดกระบวนการสำหรับวัตถุเช่นอาศัยไฟล์การตั้งค่าจำนวนมาก นอกจากนี้คุณมักจะเห็นวิธีการเป็นโรงงานในโปรแกรมของคุณเพื่อให้คลาส subclass กำหนดประเภทวัตถุที่ต้องสร้าง
ข้อความ
ในตัวอย่างต่อไปนี้รหัสรูปแบบตัวสร้างที่ปรับปรุงใหม่ในบทที่ 26 โดยใช้วิธีการโรงงาน:
การคัดลอกรหัสมีดังนี้:
var car = (function () {
var car = function (รุ่น, ปี, ไมล์) {
this.model = model;
this.year = ปี;
this.miles = ไมล์;
-
ฟังก์ชั่น Return (รุ่น, ปี, ไมล์) {
คืนรถใหม่ (รุ่นปีไมล์);
-
-
var tom = รถใหม่ ("ทอม", 2009, 20000);
var dudu = รถใหม่ ("dudu", 2010, 5000);
หากเข้าใจยากลองยกตัวอย่างอื่น:
การคัดลอกรหัสมีดังนี้:
var productManager = {};
ProductManager.createProducta = function () {
console.log ('producta');
-
ProductManager.createProductB = function () {
console.log ('productb');
-
ProductManager.Factory = ฟังก์ชั่น (typeType) {
ส่งคืน ProductManager ใหม่ [typetype];
-
ProductManager.Factory ("CreateProducta");
ถ้าเรายังไม่เข้าใจมันก็จะมีรายละเอียดมากขึ้น หากเราต้องการแทรกองค์ประกอบบางอย่างลงในหน้าเว็บและองค์ประกอบเหล่านี้ไม่ได้รับการแก้ไขในประเภทพวกเขาอาจเป็นรูปภาพการเชื่อมต่อหรือข้อความ ตามคำจำกัดความของรูปแบบโรงงานเราจำเป็นต้องกำหนดคลาสโรงงานและคลาสย่อยที่เกี่ยวข้อง ก่อนอื่นให้กำหนดการใช้งานเฉพาะของคลาสย่อย (นั่นคือฟังก์ชั่นย่อย):
การคัดลอกรหัสมีดังนี้:
var page = หน้า || -
page.dom = page.dom || -
// ฟังก์ชั่นย่อย 1: ข้อความประมวลผล
page.dom.text = function () {
this.insert = function (โดยที่) {
var txt = document.createtextNode (this.url);
Where.appendchild (txt);
-
-
// ฟังก์ชั่นย่อย 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 (ลิงก์);
-
-
// ฟังก์ชั่นย่อย 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) {
ส่งคืนหน้าใหม่ tdom [type];
-
วิธีใช้เป็นดังนี้:
การคัดลอกรหัสมีดังนี้:
var o = page.dom.factory ('ลิงก์');
o.url = 'http://www.cnblogs.com';
O.Insert (document.body);
ณ จุดนี้ฉันเชื่อว่าทุกคนเข้าใจการแนะนำของแบบจำลองโรงงานแล้วดังนั้นฉันจะไม่อธิบายอีกต่อไป
สรุป
เมื่อใดควรใช้โหมดโรงงาน
แบบจำลองโรงงานมีประโยชน์อย่างยิ่งในสถานการณ์ต่อไปนี้:
1. การก่อสร้างวัตถุมีความซับซ้อนมาก
2. คุณต้องพึ่งพาสภาพแวดล้อมเฉพาะเพื่อสร้างอินสแตนซ์ที่แตกต่างกัน
3. จัดการวัตถุขนาดเล็กจำนวนมากที่มีคุณลักษณะเดียวกัน
เมื่อไม่ควรใช้โหมดโรงงาน
อย่าใช้โมเดลโรงงานในทางที่ผิดบางครั้งมันก็เพิ่มความซับซ้อนที่ไม่จำเป็นให้กับรหัสและทำให้ยากต่อการทดสอบ