التعريف: تأكد من أن كائن (فئة) يحتوي على مثيل واحد فقط ويوفر نقطة وصول عالمية للوصول إليها ؛
مبدأ التنفيذ: استخدم عمليات الإغلاق للحفاظ على إشارة إلى متغير محلي يحمل المثيل الوحيد الذي تم إنشاؤه لأول مرة ؛
يستخدم بشكل أساسي لـ: ذاكرة التخزين المؤقت العالمية ، ونافذة تسجيل الدخول العائمة ، وما إلى ذلك ، عند الحاجة إلى مثيل فريد فقط ؛
1. طرق تنفيذ نمط المفرد لكائن نمط غير سينغليتون (مثل العرض التوضيحي):
أضف طريقة ثابتة إلى العرض التوضيحي لتنفيذ Singleton:
demo.getSingle = (function () {var demo = null ؛ function function (name) {if (! demo) {demo = new demo (name) ؛} return demo ؛}}) () ؛الاستخدام:
وضع غير Singleton: var a = new Demo ('Peter') ؛
وضع المفرد:
var b1 = demo.getsingle ('peter') ؛ var b2 = demo.getsingle ('sufei') ؛ b1 === b2 ؛ // true ، كل مرجع تجريبي جديد ('peter')تنفيذ المفردات من خلال فصول الوكيل:
var proxydemo = (function () {var demo = null ؛ function function (name) {if (! demo) {demo = new demo (name) ؛} return demo ؛}}) () ؛الاستخدام:
وضع غير Singleton: var a = new Demo ('Peter') ؛
وضع Singleton: var B = New Proxydemo ('Peter') ؛
2. نمط Singleton الكسول: إنشاء المفرد فقط عند الحاجة ؛
إليكم كيفية إنشاء مفردة عامة كسول:
var getingle = function (foo) {var single = null ؛ عودة وظيفة () {return single || (Single = foo.apply (هذا ، الحجج)) ؛ }} ؛الاستخدام:
var createLoginLayer = function () {var fragment = document.createdOcumentFragment () ؛ var div = document.createElement ('div') ؛ div.style.display = 'none' ؛ // يضيف ما يلي عناصر تسجيل الدخول الأخرى إلى div ... divic.body.appendChild (frag.appendchild (div)) ؛ return div ؛} var createSingLelogInlayer = getingle (createLoginLayer) ؛ // عندما ينقر المستخدم على الزر لأول مرة (معرف = عندما يكون "LGBTN ') ، قم بإنشاء وعرض نافذة تسجيل الدخول. بعد النقر المتكرر لن يتم إنشاء الزر بشكل متكرر ؛ document.getElementById ('lgbtn'). onClick = function () {var lg = createSingLelogInlayer () ؛ lg.style.display = 'block' ؛}المرفق: نتيجة الحساب لوظيفة ذاكرة التخزين المؤقت ، مثل حساب تسلسل الأرقام
فيما يلي طريقة للكتابة بدون ذاكرة التخزين المؤقت ، وهي بطيئة جدًا!
وظيفة foo (n) {النتائج = 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 = {} ؛ function function (n) {if (! cache [n]) {cache [n] = n <2؟ n: foo (n - 1) + foo (n - 2) ؛} return cache [n] ؛} ؛}) () ؛ console.log (foo (100)) ؛مراجع:
"وضع جافا سكريبت"
"أنماط تصميم JavaScript وممارسة التطوير"
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.