Latest web development tutorials

سينغلتون نمط

سينغلتون (سينغلتون نمط) جافا هي واحدة من أبسط نمط التصميم. هذا النوع من أنماط التصميم تنتمي إنشاء مخطط، الذي يوفر أفضل وسيلة لخلق الكائنات.

ويتضمن هذا النموذج فئة واحدة هي المسؤولة عن خلق الأشياء الخاصة بك، مع ضمان أن يتم إنشاء سوى كائن واحد. توفر هذه الفئة كائن فريد من زيارتهم، ويمكن الوصول إليها مباشرة، لا تحتاج إلى مثيل كائن من تلك الفئة.

ملاحظة:

  • 1، والطبقة المفرد يمكن أن يكون لها مثيل واحد فقط.
  • 2، والطبقة المفردة يجب إنشاء مثيل فريدة خاصة بها.
  • 3، يجب أن الطبقة المفرد توفير هذا المثال لكافة الكائنات الأخرى.

مقدمة

القصد: ضمان مثيل واحد فقط من فئة، وتوفير نقطة وصول العالمية للوصول إليه.

الحل الرئيسي: استخدام فئة العالمية في كثير من الأحيان خلق وتدميرها.

متى تستخدم: عندما تريد السيطرة على عدد من الحالات عندما لحفظ موارد النظام.

كيفية حل: تحديد ما إذا كان النظام لديه بالفعل هذه حالة واحدة، اذا عاد، لو لم يخلق بعد.

رمز مفتاح: المنشئ هو الخاص.

أمثلة التطبيق: 1، يمكن للحزب أن يكون رئيس واحد فقط.2، ويندوز هو عملية متعددة ومتعددة الخيوط، في تشغيل ملف عند ومعالجة جميع الملفات يجب أن يتم تنفيذ ذلك عمليات متعددة لا محالة أو المواضيع في وقت واحد وثيقة من هذه الظاهرة مثيل فريدة من نوعها. 3، وغالبا ما يتم تصميم بعض من مدير المعدات كنموذج لحالة واحدة، مثل جهاز كمبيوتر مع طابعتين في الإخراج عند الضرورة للتعامل مع طابعتين لا يمكن طباعة الملف نفسه.

المزايا: 1، حالة واحدة فقط في الذاكرة، والحد من ذاكرة النفقات العامة، وخصوصا المتكررة خلق وتدمير الحالات (مثل كلية الإدارة الرئيسية الصفحة التخزين المؤقت).2، لتجنب شغل العديد من الموارد (مثل عمليات الملفات الكتابة).

سلبيات: لا واجهة، لا ترث، والمسؤولية واحدة صراع المبدأ، فئة يجب أن يكون فقط تشعر بالقلق إزاء منطق داخلي، وليس في الخارج مثل كيفية مثيل.

سيناريوهات الاستخدام: 1، تتطلب إنتاج رقم تسلسلي فريد.2، عدادات الشبكة العالمية، وليس كل قاعدة بيانات في ريغا مرة واحدة مع حالة واحدة لتحديث مؤقتا. 3، كائن تم إنشاؤه من قبل الحاجة للاستهلاك المفرط للموارد، مثل اتصال I / O لقاعدة البيانات وهلم جرا.

ملاحظة: getInstance () الأسلوب يتطلب استخدام تزامن قفل متزامنة (Singleton.class) لمنع مواضيع متعددة في المثال قضية مثيل عدة مرات.

تحقيق

سنقوم إنشاء فئةSingleObject.الطبقةSingleObjectلها في البناء الخاص بك، ومثيل ثابت.

توفر الطبقةSingleObjectأسلوب ثابت للحصول على خارج سبيل المثال لها ثابت.SingletonPatternDemo، والطبقاتمظاهرة لدينا باستخدام الدرجةSingleObjectللحصول على وجوهSingleObject.

نمط المفرد UML الرسم البياني

خطوة 1

إنشاء فئة المفرد.

SingleObject.java

الطبقة العامة SingleObject {

   // إنشاء كائن SingleObject المثال SingleObject ثابت الخاص = SingleObject الجديدة ()؛

   // جعل منشئ الخاص، وبالتالي فإن الطبقة لا مثيل SingleObject الخاص () {}

   // احصل على الكائن الوحيد من العامة المتاحة ثابت SingleObject getInstance () {
      العودة المثال.
   }

   showMessage باطلة العامة () {
      System.out.println ( "مرحبا أيها العالم!")؛
   }
}

خطوة 2

الحصول على كائن فريد من الدرجة المفرد.

SingletonPatternDemo.java

الطبقة العامة SingletonPatternDemo {
   (وسائط سلسلة []) العامة ساكنة باطلة الرئيسية {

      // منشئ // غير الشرعيين خطأ وقت الترجمة: منشئ SingleObject () غير مرئي // كائن SingleObject = SingleObject الجديدة ()؛

      // احصل الوحيد الكائن كائن متاحة SingleObject = SingleObject.getInstance ()؛

      // رسالة العرض object.showMessage ()؛
   }
}

خطوة 3

تحقق من الانتاج.

مرحبا العالم!

العديد تنفيذ نمط سينغلتون

تنفيذ نمط المفرد عدد من الطرق، على النحو التالي:

1، على غرار كسول، موضوع آمنة

هل التهيئة كسول: نعم

هل متعدد الخيط آمنة: لا

تحقيق الصعوبة: من السهل

الوصف: هذه الطريقة هي الطريقة الأساسية لتحقيق هذا التنفيذ والمشكلة الأكبر ليست دعم متعدد خيوط.لأنه لا يوجد قفل متزامنة، وذلك بالمعنى الدقيق للكلمة فإنه ليس المفرد.
تحميل كسول في هذا الطريق الواضح أنها لا تتطلب سلامة موضوع، والعمل في مجتمع متعدد الخيوط لا يعمل.

أمثلة التعليمات البرمجية:

الطبقة العامة سينغلتون {  
    المثال سينغلتون ثابت الخاص؛  
    سينغلتون الخاص () {}  
  
    ساكنة العام سينغلتون getInstance () {  
    إذا (مثيل == فارغة) {  
        المثال = جديد سينغلتون ()؛  
    }  
    العودة المثال.  
    }  
}  

العرض القادم من عدة تطبيقات تدعم مواضيع متعددة، ولكنها تختلف في الأداء.

2، نمط كسول، موضوع آمنة

هل التهيئة كسول: نعم

هل متعدد الخيط آمنة: نعم

تحقيق الصعوبة: من السهل

الوصف: في هذه الطريقة يكون لديك تحميل كسول جيدة، يمكن أن تعمل بشكل جيد في الصفحات المتعددة، ومع ذلك، هو كفاءة منخفضة جدا، 99٪ من الحالات لا تتطلب التزامن.
ميزة: تم تهيئة المكالمة الأولى، لتجنب الذاكرة مهدرة.
سلبيات: يجب أن يكون مؤمنا مزامنة لضمان حالة واحدة، ولكن القفل يؤثر على كفاءة.
getInstance () أداء التطبيق ليست حرجة (التي تستخدم أقل كثيرا).

أمثلة التعليمات البرمجية:

الطبقة العامة سينغلتون {  
    المثال سينغلتون ثابت الخاص؛  
    سينغلتون الخاص () {}  
    العام ثابت متزامنة سينغلتون getInstance () {  
    إذا (مثيل == فارغة) {  
        المثال = جديد سينغلتون ()؛  
    }  
    العودة المثال.  
    }  
} 

3، صيغة تجويع

هل تهيئة كسول: لا

هل متعدد الخيط آمنة: نعم

تحقيق الصعوبة: من السهل

الوصف: إنها أكثر شيوعا، ولكن عرضة للكائنات القمامة.
المزايا: غير مؤمن، وتحسين الكفاءة.
العيوب: تتم تهيئة محمل الطبقة، يضيع الذاكرة.
لأنه يقوم على آلية classloder يتجنب خاصية تعدد التزامن، ومع ذلك، مثلا عندما يتم إنشاء مثيل أنها محمل الدرجة، على الرغم من أن الطبقة سبب تحميل مجموعة متنوعة من الأسباب، فإن معظم نمط سينغلتون هو استدعاء الأسلوب getInstance، ولكن لا يمكن تحديد وهناك طرق أخرى (أو أساليب ثابتة أخرى) يؤدي إلى الطبقة تحميل، وهذه المرة على ما يبدو لم تصل المثال التهيئة تأثير تحميل كسول.

أمثلة التعليمات البرمجية:

الطبقة العامة سينغلتون {  
    ثابت سينغلتون المثال الخاص = سينغلتون جديد ()؛  
    سينغلتون الخاص () {}  
    ساكنة العام سينغلتون getInstance () {  
    العودة المثال.  
    }  
}  

4، انقر نقرا مزدوجا الاختيار قفل / مزدوج قفل فحص (مختبر دبي المركزي، وهذا هو قفل التحقق المزدوج)

جدك النسخة: JDK1.5 من

هل التهيئة كسول: نعم

هل متعدد الخيط آمنة: نعم

ندرك صعوبة: أكثر تعقيدا

الوصف: يستخدم هذا الأسلوب قفل آلية مزدوجة والسلامة و، في حالة من خيوط المعالجة المتعددة للحفاظ على الأداء العالي.
getInstance () أداء التطبيقات أمر بالغ الأهمية.

أمثلة التعليمات البرمجية:

الطبقة العامة سينغلتون {  
    خاص متقلبة ثابت المفرد المفرد.  
    سينغلتون الخاص () {}  
    ساكنة العام سينغلتون getSingleton () {  
    إذا (المفرد == فارغة) {  
        تزامن (Singleton.class) {  
        إذا (المفرد == فارغة) {  
            المفرد = سينغلتون جديد ()؛  
        }  
        }  
    }  
    العودة المفرد.  
    }  
}  

5، نوع التسجيل / الطبقات الداخلية ثابتة

هل التهيئة كسول: نعم

هل متعدد الخيط آمنة: نعم

ندرك صعوبة: عام

الوصف: وهذه الطريقة يمكن تحقيق نفس التأثير المزدوج الاختيار وضع القفل، ولكن تنفيذ أسهل.استخدام التهيئة كسول من حقل ثابت وينبغي أن تستخدم في هذه الطريقة بدلا من مراجعة ضعف وضع القفل. هذا لا ينطبق إلا على حالة حقل ثابت، انقر نقرا مزدوجا التحقق من وضع قفل يمكن استخدامها عند الحاجة تأخير تهيئة الحقول سبيل المثال.
يأخذ هذا النهج أيضا الاستفادة من آليات classloder لضمان فقط موضوع واحد المثال التهيئة، فإنه مع 3 طرق مختلفة هي: طالما أن الطريق الثالث يتم تحميل الطبقة المفرد، يتم إنشاء مثيل على سبيل المثال (تحميل كسول لم تصل التأثير)، ولكن هذا النهج يتم تحميل الطبقة المفرد، قد لا تتم تهيئة سبيل المثال. لأنه لا يستخدم الطبقة SingletonHolder بنشاط، عرض فقط من خلال أسلوب الدعوة getInstance، يبدو تحميل الطبقة SingletonHolder، التي يتم إنشاء مثيل سبيل المثال. تخيل، إذا كنت مثيل مثيل الموارد بشكل كبير، لذلك أردت أن تأخير تحميل، من ناحية أخرى، عندما كنت لا تريد مثيل محمل الطبقة المفرد، لأنه لا يمكن ضمان الطبقة سينغلتون قد تكون نشطة أيضا في مناطق أخرى بحيث تكون تحميل، وهذه المرة إلى مثيل المثال غير مناسب بشكل واضح. هذه المرة، وبهذه الطريقة بالمقارنة مع الأنواع الثلاثة الأولى من الطرق فمن المعقول جدا.

أمثلة التعليمات البرمجية:

الطبقة العامة سينغلتون {  
    خاصة فئة ثابتة SingletonHolder {  
    خاص ثابت النهائي سينغلتون المثال = سينغلتون جديد ()؛  
    }  
    سينغلتون الخاص () {}  
    العام ثابت النهائي سينغلتون getInstance () {  
    العودة SingletonHolder.INSTANCE.  
    }  
}   

6، تعداد

جدك النسخة: JDK1.5 من

هل تهيئة كسول: لا

هل متعدد الخيط آمنة: نعم

تحقيق الصعوبة: من السهل

الوصف: لم يتم بعد اعتماد هذا التطبيق على نطاق واسع، ولكن هذا هو أفضل وسيلة لتنفيذ نمط المفرد.ومن أكثر إيجازا تلقائية آلية، دعم التسلسل لمنع حالات متعددة من المطلق.
هذا النهج هو جافا الفعالة مؤلف جوش بلوك يدعو إلى الطريقة التي يمكن أن ليس فقط تجنب مشاكل التزامن الصفحات المتعددة، ولكن أيضا يدعم تلقائيا آلية التسلسل لمنع إلغاء التسلسل إعادة خلق كائن جديد، ومنع تماما مثيل متعددة. ومع ذلك، منذ أن انضمت إلا بعد خصائص التعداد JDK1.5، الكتابة في هذه الطريقة لا يمكن إلا أن يشعر غريب، في الممارسة العملية، نادرا ما تستخدم.
ليس من هجوم انعكاس لاستدعاء منشئ الخاص.

أمثلة التعليمات البرمجية:

التعداد العام سينغلتون {  
    المثال.  
    whateverMethod الفراغ الجمهور () {  
    }  
}  

حكم من الإبهام: في ظل الظروف العادية، لا تنصح باستخدام النوع الأول والنوع الثاني الطريقة البطيئة، فمن المستحسن استخدام الطريق الثالث رجل جائع.فقط عندما تريد تطبيق تأثير تحميل كسول هو واضح، وسوف نستخدم أنواع الخمسة الأولى من طرق للتسجيل. اذا وصل الامر الى إلغاء تسلسل الكائنات إلى إنشاء، يمكنك محاولة استخدام طريقة العد السادس. إذا كان لديك الاحتياجات الخاصة الأخرى، يمكنك أن تنظر باستخدام شيك مزدوج الرابع على وضع القفل.