คำจำกัดความ: ตรวจสอบให้แน่ใจว่าวัตถุ (คลาส) มีเพียงอินสแตนซ์เดียวและให้จุดเชื่อมต่อทั่วโลกเพื่อเข้าถึง
หลักการการนำไปใช้: ใช้การปิดเพื่อรักษาการอ้างอิงไปยังตัวแปรท้องถิ่นที่เก็บอินสแตนซ์เดียวที่สร้างขึ้นเป็นครั้งแรก
ส่วนใหญ่ใช้สำหรับ: แคชทั่วโลก, หน้าต่างลอยตัวเข้าสู่ระบบ ฯลฯ เมื่อต้องการอินสแตนซ์ที่ไม่ซ้ำกันเท่านั้น
1. วิธีการใช้รูปแบบ Singleton สำหรับวัตถุรูปแบบที่ไม่ใช่ Singleton (เช่นการสาธิต):
เพิ่มวิธีการคงที่ในการสาธิตเพื่อใช้ซิงเกิลตัน:
demo.getSingle = (function () {var demo = null; function return (ชื่อ) {if (! demo) {demo = demo ใหม่ (ชื่อ);} return demo;}}) ();การใช้งาน:
โหมดที่ไม่ใช่ Singleton: var a = การสาธิตใหม่ ('Peter');
โหมดซิงเกิลตัน:
var b1 = demo.getsingle ('peter'); var b2 = demo.getsingle ('sufei'); b1 === b2; // true, อ้างอิงใหม่ทั้งหมด ('Peter')ใช้ Singletons ผ่านชั้นเรียนพร็อกซี:
var proxydemo = (ฟังก์ชัน () {var demo = null; ฟังก์ชัน return (ชื่อ) {ถ้า (! demo) {demo = demo ใหม่ (ชื่อ);} return demo;}}) ();การใช้งาน:
โหมดที่ไม่ใช่ Singleton: var a = การสาธิตใหม่ ('Peter');
โหมดซิงเกิลตัน: var b = new proxydemo ('peter');
2. รูปแบบ Singleton ขี้เกียจ: สร้างซิงเกิลตันเมื่อจำเป็นเท่านั้น
นี่คือวิธีสร้าง Singleton ขี้เกียจทั่วไป:
var getingle = function (foo) {var single = null; return function () {return single || (single = foo.apply (นี้, อาร์กิวเมนต์)); -การใช้งาน:
var createLoginLayer = function () {var fragment = document.createdocumentFragment (); var div = document.createElement ('div'); div.style.display = 'ไม่มี'; // ต่อไปนี้เพิ่มองค์ประกอบการเข้าสู่ระบบอื่น ๆ ใน div ... document.body.appendchild (frag.appendchild (div)); return div;} var createsingleloginLayer = getSingle (createLoginLayer); // เมื่อผู้ใช้คลิกปุ่มเป็นครั้งแรก (id = เมื่อ 'LGBTN') สร้างและแสดงหน้าต่างเข้าสู่ระบบ หลังจากคลิกปุ่มซ้ำ ๆ จะไม่ถูกสร้างขึ้นซ้ำ ๆ document.getElementById ('lgbtn'). onclick = function () {var lg = createsingleloginlayer (); lg.style.display = 'block';}สิ่งที่แนบมา: ผลการคำนวณของฟังก์ชันแคชเช่นการคำนวณลำดับของตัวเลข
ต่อไปนี้เป็นวิธีการเขียนโดยไม่ต้องแคชซึ่งช้ามาก!
ฟังก์ชั่น foo (n) {results = n <2? n: foo (n - 1) + foo (n - 2); ผลลัพธ์ส่งคืน;} console.log (foo (40)); // จะต้องคำนวณเป็นเวลาหลายวินาทีต่อไปนี้เป็นวิธีการเขียนแคชและผลลัพธ์จะถูกผลิตขึ้นทันที!
var cache = {}; function foo (n) {if (! cache [n]) {cache [n] = n <2? n: foo (n - 1) + foo (n - 2); } ส่งคืนแคช [n];} console.log (foo (100));การเขียนที่ดีขึ้น:
var foo = (function () {var cache = {}; return function (n) {ถ้า (! cache [n]) {cache [n] = n <2? n: foo (n - 1) + foo (n - 2);} cache return [n];};}) ();ข้อมูลอ้างอิง:
"โหมดจาวาสคริปต์"
"รูปแบบการออกแบบ JavaScript และแนวปฏิบัติในการพัฒนา"
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น