نمط Singleton هو نمط إنشاء كائن يضمن وجود مثيل واحد فقط لفئة في النظام.
في لغة Java ، هناك فوائد للقيام بذلك:
1. للكائنات المستخدمة بشكل متكرر ، يمكن حذف الوقت الذي يقضيه في إنشاء كائنات ؛
2. نظرًا لانخفاض عدد العمليات الجديدة ، يتم تقليل تواتر استخدام ذاكرة النظام ، مما يقلل من ضغط GC ويقصر وقت توقف GC.
تجزئة نمط المفرد:
1.
الطبقة العامة Singleton {private Singleton () {system.out.println ("Singleton.Singleton ()") ؛ } Singleton Singleton الخاص = New Singleton () ؛ Singleton Singleton GetInstance () {Return Singleton ؛ }}ملاحظة: أولاً ، يجب أن يكون لدى فئة Singleton مُنشئ مستوى وصول خاص للتأكد من عدم إنشاء مثيل لفرد Singleton بواسطة رمز النظام الآخر ؛ ثانياً ، يجب أن يكون متغير عضو Singleton وطريقة GetInstance () ثابتًا.
فئة Singleton هذه بسيطة للغاية وموثوقة للغاية. العيب الوحيد هو أنه لا يمكن تحميل Singleton بكرات. على سبيل المثال ، نظرًا لأن عملية إنشاء Singleton بطيئة جدًا ويتم تعريف المتغير العضو على أنه ثابت ، عندما يقوم JVM بتحميل فئة Singleton ، سيتم إنشاء كائن Singleton أيضًا. بعد ذلك ، سيتم إنشاء كائن Singleton في أي مكان يتم فيه استخدام فئة Singleton ، بغض النظر عما إذا كان يتم استخدام كائن Singleton. على سبيل المثال:
الطبقة العامة Singleton {private Singleton () {system.out.println ("Singleton.Singleton ()") ؛ } Singleton Singleton الخاص = New Singleton () ؛ Singleton Singleton GetInstance () {Return Singleton ؛ ) }} 2. من أجل تحسين سرعة الاتصال للوظائف ذات الصلة ، يجب تقديم آلية تحميل كسول.
حزمة com.luchao.singtonle ؛ الطبقة العامة lazysingleton {private lazysingleton () {system.out.println ("lazysingleton.lazysingleton ()") ؛ } leazysingleton lazysingleton leazyinstance = null ؛ lazysingleton static static متزامنة عامة () {if (lazyinstance == null) lazyinstance = new lazysingleton () ؛ إرجاع Lazyinstance. }}إن تعيين تهيئة Singleton المتغير الثابت لاغية ، مما يضمن عدم وجود تحميل إضافي عند بدء تشغيل النظام. في طريقة getInstance () ، يتم تحديد أن المثال الحالي موجود بالفعل. إذا كان موجودًا ، فإنه يعود. إذا لم يكن موجودًا ، يتم إنشاء مفردة. يجب أن يكون GetInstance () طريقة متزامنة ، لأنه في بيئة متعددة الخيوط ، عندما يقوم الخيط 1 ببناء مفردة وقبل اكتمال المهمة ، قد يحدد الموضوع 2 أن المثيل فارغ ، لذلك سيبدأ الموضوع 2 البرنامج لإنشاء مفردة جديدة ، مما يؤدي إلى إنشاء العديد من المفردات.
ينفذ تطبيق Singleton مثال أعلاه ، ولكنه يقدم طريقة التزامن ، والتي تستغرق وقتًا أطول بكثير من برنامج Singleton الأول في بيئة متعددة الخيوط.
3. يستخدم نمط Singleton الفصول الداخلية للحفاظ على إنشاء المفردات
الطبقة العامة staticsingleton {private Staticsingleton () {system.out.println ("Staticsingleton.Staticsingleton ()") ؛ } private static class Singletonholder {private static staticsingleton ataticsingleton = new Staticsingleton () ؛ } staticsingleton getInstance () {return singletonholder.ataticsingleton ؛ }}عندما يتم تحميل Staticsingleton ، لن يتم إنشاء إنشاء فئة داخلية ، مما يضمن عدم تهيئة فئة Singleton عند تحميل فئة StaticSingleton في JVM ، ويتم تحميل حامل القميص عند استدعاء طريقة getInstance () ، وبالتالي تهيئة الحالة. كما أنه يستخدم لإنشاء مثيلات عند تحميل الفصل ، لذلك فهو صديق بشكل طبيعي.
لا يمكن أن يؤدي استخدام الفئات الداخلية لإكمال وضع الربح الواحد إلى تحقيق التحميل المتأخر فحسب ، بل يستخدم أيضًا كلمات رئيسية متزامنة. إنه نهج كامل نسبيا.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع.