1. وضع مقدمة
تعريف النمط
تأكد من أن فئة معينة تحتوي على مثيل واحد فقط ، وتستند إلى مثيله بنفسه ويوفر هذا المثيل للنظام بأكمله.
سيناريو استخدام الوضع
تأكد من أن الفئة تحتوي على كائن واحد فقط ، على سبيل المثال ، يتطلب إنشاء كائن ما موارد كبيرة ، مثل الوصول إلى الموارد مثل IO وقواعد البيانات.
2. مخطط فئة UML
مقدمة الشخصية:
(1) العميل: عميل رفيع المستوى.
(2) Singleton: Singleton.
3. التنفيذ البسيط للنمط
الطبقة العامة singleton {private static singleton intance ؛ Singleton الخاص () {} Singleton GetInstance () { / * * * * في البداية ، عندما تأتي مؤشرات ترابط متعددة ، فإنها تواجه أقفال ، ودخول مؤشر ترابط واحد ، وهو كائن جديد ، جديد ؛ مؤشرات الترابط اللاحقة تدخل ، وليس فارغة ، لا توجد عملية ؛ أخيرًا ، إرجاع مباشرة * الكائن غير فارغ ، وأدخل مؤشرات ترابط متعددة الوظيفة ، وليس فارغة ، ولا يتم تنفيذ أي عملية قفل ، وإرجاع مباشرة */ if (intance == null) {synchronized (singleton.class) {if (intance == null) {intance = new singleton () ؛ }} إرجاع intance ؛ }} class Singleton1 {// Lazy Private Static Singleton1 intance = new Singleton1 () ؛ // lazy ، إنه يحمل خاص singleton1 () {} Singleton1 getInstance () {return intance ؛ }} Class Singleton2 {// Hungry Private Static Singleton2 intance ؛ خاص singleton2 () {} public static singleton2 getInstance () {// loads if (intance == null) {intance = new Singleton2 () ؛ } عودة نية ؛ }} class Singleton3 {// private static singleton3 intance ؛ خاص singleton3 () {} singleton3 static singleton3 getInstance () {// تحميل عند استخدامه ، فإن المكالمات المتعددة الخيوط لها إجراء قفل إذا (intance == null) {intance = new singleton3 () ؛ } عودة نية ؛ }} class singleton4 {// private static singleton4 intance ؛ خاص singleton4 () {} static static singleton4 getInstance () {// الانهيار Synchronized (singleton4 }} إرجاع intance ؛ }}4. الايجابيات والعيوب
(1) المزايا:
A. نظرًا لأن وضع Singleton يحتوي على مثيل واحد فقط في الذاكرة ، يتم تقليل نفقات الذاكرة ، خاصةً عندما يحتاج كائن إلى إنشاء وتدمير بشكل متكرر ، ولا يمكن تحسين الأداء أثناء الخلق أو التدمير ، فإن مزايا وضع Singleton واضحة للغاية.
نظرًا لأن نمط Singleton يولد مثيلًا واحدًا فقط ، يتم تقليل النفقات العامة للأداء للنظام. عندما يتطلب توليد كائن الكثير من الموارد ، مثل قراءة التكوين وإنشاء كائنات أخرى تابعة ، يمكن حلها عن طريق إنشاء كائن Singleton مباشرة عند بدء التطبيق ثم يقيم بشكل دائم في الذاكرة ؛
C. يمكن أن يتجنب وضع Singleton مهنًا متعددة للموارد ، مثل إجراء ملف الكتابة ، لأن مثيلًا واحدًا فقط في الذاكرة ، وتجنب عمليات الكتابة المتزامنة على نفس ملف المورد.
يمكن لوضع D. Singleton تعيين نقاط الوصول العالمية في النظام ، وتحسين ومشاركة الوصول إلى الموارد. على سبيل المثال ، يمكن تصميم فئة Singleton لتكون مسؤولة عن تعيين ومعالجة جميع جداول البيانات.
(2) عيوب
A. وضع Singleton عمومًا ليس له واجهة ، ومن الصعب التوسع. إذا كنت ترغب في التوسع ، فلا توجد طريقة ثانية لتنفيذها باستثناء تعديل الكود.