Definisi: Pastikan bahwa suatu objek (kelas) hanya memiliki satu contoh dan menyediakan titik akses global untuk mengaksesnya;
Prinsip Implementasi: Gunakan penutupan untuk mempertahankan referensi ke variabel lokal yang memiliki satu -satunya contoh yang dibuat untuk pertama kalinya;
Terutama digunakan untuk: cache global, jendela mengambang login, dll., Ketika hanya contoh unik yang diperlukan;
1. Metode untuk mengimplementasikan pola singleton untuk objek pola non-singleton (seperti demo):
Tambahkan metode statis untuk demo untuk mengimplementasikan singleton:
Demo.getSingle = (function () {var demo = null; return function (name) {if (! Demo) {demo = demo baru (name);} return demo;}}) ();penggunaan:
Mode Non-Singleton: var a = demo baru ('Peter');
Mode Singleton:
var b1 = demo.getsingle ('Peter'); var b2 = demo.getsingle ('sufei'); b1 === b2; // true, semua referensi demo baru ('Peter')Menerapkan singleton melalui kelas proxy:
var proxyDemo = (function () {var demo = null; return function (name) {if (! demo) {demo = demo baru (name);} return demo;}}) ();penggunaan:
Mode Non-Singleton: var a = demo baru ('Peter');
Singleton Mode: var b = new proxyDemo ('Peter');
2. Pola Lazy Singleton: Buat Singleton Hanya Saat Dibutuhkan;
Berikut adalah cara membuat singleton malas umum:
var getSingle = function (foo) {var single = null; return function () {return single || (single = foo.Amply (ini, argumen)); }};penggunaan:
var createLogInlayer = function () {var fragment = document.createDocumentFragment (); var div = document.createElement ('div'); div.style.display = 'none'; // Berikut ini menambahkan elemen login lain ke div ... document.body.appendChild (frag.AppendChild (div)); return div;} var createSingLeloginLayer = getSingle (createLogInlayer); // Ketika pengguna mengklik tombol untuk pertama kalinya (id = ketika 'lgbtn'), buat dan tampilkan jendela login. Setelah mengklik berulang tombol tidak akan dibuat berulang kali; document.geteLementById ('lgbtn'). onclick = function () {var lg = createSingLeloginLayer (); lg.style.display = 'block';}Lampiran: Hasil perhitungan fungsi cache, seperti menghitung urutan angka
Berikut ini adalah cara untuk menulis tanpa cache, yang sangat lambat!
function foo (n) {result = n <2? n: foo (n - 1) + foo (n - 2); Hasil pengembalian;} console.log (foo (40)); // Itu harus dihitung selama beberapa detikBerikut ini adalah metode penulisan cache, dan hasilnya pada dasarnya diproduksi secara instan!
var cache = {}; function foo (n) {if (! cache [n]) {cache [n] = n <2? n: foo (n - 1) + foo (n - 2); } return cache [n];} console.log (foo (100));Tulisan yang lebih baik:
var foo = (function () {var cache = {}; return function (n) {if (! cache [n]) {cache [n] = n <2? n: foo (n - 1) + foo (n - 2);} return cache [n];};}) (); konsol.log (fooo (100));Referensi:
"Mode JavaScript"
"Pola Desain Javascript dan Praktek Pengembangan"
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.