التعريف: تأكد من أن الفئة لديها مثيل واحد فقط ، وأنشئه بنفسه ويوفر هذا المثيل للنظام بأكمله.
النوع: إنشاء مخطط فئة نمط الفئة:
نقاط معرفة الرسم البياني:
1. تنقسم مخططات الفصل إلى ثلاثة أجزاء ، والاسم ، والسمات ، والطرق.
2. معلومات التعليق تبدأ بـ << وينتهي مع >>
3. Modifier + يمثل الجمهور ، - يمثل الخاص ، # يمثل محمية ، لا شيء يمثل الحزمة المرئية.
4. تمثل السمات أو الأساليب التي تحتها خط الساكنة.
5. يمكن للأصدقاء الذين ليسوا على دراية بالعلاقة بين الأشياء في مخطط الفصل أن يشير إلى المقالة: العلاقة بين الفصول في نمط التصميم.
يجب أن يكون وضع Singleton هو أبسط وضع بين أوضاع التصميم 23. لديها العناصر التالية:
دعونا نلقي نظرة على مثال بسيط:
package com.wolf.action ؛ import java.util.hashmap ؛ import java.util.map ؛ demo public class {public static void main (args args []) rems instantiationexception ، uncluccessexception ، classnotfoundException {system.out.println (son.getInstance () getname () ؛ System.out.println ("من أنا") ؛ }} son class يمتد الأب {private string name = "son" ؛ فئة السلسلة النهائية = "Demo" ؛ سلسلة محمية getName () {return this.query ("aaa") ؛ } الابن الثابت العام getInstance () يلقي instantiationException ، غير alucentalAccessException ، classnotfoundException {// هذا يجب أن يكون مسارًا عالميًا ، وإعادة الإرجاع (SON) مثيل ("com.wolf.action.son") ؛ }} class الأب {خريطة ثابتة خاصة <string ، Object> estance = new HashMap <string ، Object> () ؛ اسم السلسلة الخاصة = "فئة الممتاز" ؛ void fatcher () {system.out.println ("أنا الفئة الأصل") ؛ } Query String Query (String SQL) {return sql + "تم القيام به" ؛ } مثيل كائن ثابت عام (سلسلة OBJNAME) يلقي instantiationException ، غير aluallAccessException ، classnotfoundException {if (extal.get (objname) == null ||! (exate.get (objname) extryof fo -earm)) } return extry.get (objname) ؛ }} ينقسم نمط Singleton إلى نوعين وفقًا لتوقيت إنشاء إنشاء الكائن: أحدهما هو المفرد الجائع والآخر هو Singleton البطيء. عندما يتم تحميل فئة Singleton ، يقوم Singleton بتركيب كائن إلى مرجعه الخاص ؛ سوف ينشئ النمط الكسول الكائن فقط عند استدعاء طريقة المثيل. الرمز كما يلي:
حالة فردية على غرار الرجل الجائع
الطبقة العامة Singleton {Private Static Singleton = New Singleton () ؛ Singleton الخاص () {} ثابتة عامة Singleton getInstance () {return Singleton ؛ }}قضية واحدة كسول
الطبقة العامة Singleton {Private Static Singleton Singleton ؛ خاص singleton () {} ثابتة ثابتة singleton getInstance () {if (singleton == null) {singleton = new Singleton () ؛ } إرجاع Singleton ؛ }}مزايا وضع المفرد:
السيناريوهات المعمول بها: نظرًا للمزايا المذكورة أعلاه لوضع Singleton ، فهو وضع تصميم أكثر شيوعًا في البرمجة. لقد لخصت ما أعرفه عن سيناريوهات مناسبة لاستخدام وضع Singleton:
ملاحظات على وضع Singleton:
بعض الجدل حول نمط المفرد في جافا:
إذا لم يتم استخدام كائن في وضع Singleton لفترة طويلة ، فهل سيتم جمعه بواسطة جامع JVM Garbage؟ لقد رأيت الكثير من المعلومات قائلة: إذا لم يتم استخدام كائن Singleton في الذاكرة لفترة طويلة ، فسيتم اعتباره قمامة بواسطة JVM وسيتم تنظيفها عند إجراء مجموعة القمامة. أنا متشكك في هذا البيان. عرضي الخاص هو: في الإصدار 1.6 الجهاز الظاهري للنقطة الساخنة ، لن يقوم جامع القمامة JVM بإعادة تدوير كائنات Singleton إلا إذا تم الرجوع إلى كائنات Singleton في Singleton بشكل مصطنع.
فيما يتعلق بهذا الجدل ، كتب المؤلف مقالة منفصلة لمناقشتها. إذا كان لديك آراء مختلفة أو شهدت هذا ، فيرجى إدخال مقالة مناقشة نموذج Singleton: مشاركة نموذج Singleton وجمع القمامة في المناقشة.
هل ستظهر العديد من المفردات في JVM
في حالة الأنظمة الموزعة ، سيتم إنشاء محمل فئة متعددة ، وسلسلة مسلسلات ، وهو أمر صحيح بلا شك. فهل سيتم إنشاء المفرد في نفس JVM؟ يمكن الحصول على نفس المفرد فقط باستخدام طريقة getInstance () التي توفرها Singleton ، ما لم يتم استخدام طريقة الانعكاس ، سيتم الحصول على مفردة جديدة. الرمز كما يلي
الفئة C = class.forname (singleton.class.getName ()) ؛ مُنشئ ct = c.getDeclaredConstructor () ؛ ct.setAccible (صحيح) ؛ Singleton Singleton = (Singleton) ct.newinstance () ؛
وبهذه الطريقة ، ستنتج كل تشغيل كائن Singleton جديد. لذلك ، عند استخدام وضع Singleton ، احرص على عدم استخدام الانعكاس لإنشاء كائنات Singleton جديدة.
هل الخيط المفرد الكسول آمن؟
في الأساس بعض العبارات عبر الإنترنت أن نمط Singleton Lazy هو عائق الخيط. حتى إضافة الكلمة الرئيسية المتزامنة إلى طريقة الاستئصال لا تزال خطرة. ومع ذلك ، بعد تشفير الاختبارات ، وجدت أنه بعد إضافة الكلمة الرئيسية المتزامنة لتعديلها ، على الرغم من أن لها تأثير جزئي على الأداء ، إلا أنها آمنة مؤشرات الترابط ولا تشتمل على كائنات متعددة.
هل هناك نوعان فقط من أوضاع المفرد: الأنماط الجائعة والكسل؟
الجياع المفرد والكسل المفرد ليست سوى اثنين من أساليب نمط Singleton السائدة نسبيا والتي شائعة الاستخدام. من الناحية النظرية ، يمكن تسمية أي نمط تصميم يمكنه تنفيذ مثيل واحد فقط من الفصل بنمط Singleton.
هل يمكن أن يتم مورث دروس سينجلتون؟
نظرًا لأن طريقة البناء خاصة ، فهي غير قابلة للوراثة ، ولكن يمكن مورث العديد من أنماط المفرد الأخرى ، مثل المفردات المسجلة.
هل من الأفضل أن تكون مفردة جائعة أو مفردة كسول
في جافا ، فإن Singleton الجائع أفضل من Singleton الكسول. في C ++ ، يتم استخدام Singletons البطيئة بشكل عام.
نمط Singleton بسيط نسبيًا ، لذلك لن أعطي مظاهرة رمز مثال هنا.