نموذج Singleton هو أبسط نموذج تصميم بين 23 طرازات التصميم ، ويستخدم أيضًا على نطاق واسع في تطوير المؤسسات. ميزة نمط Singleton هي أن هناك حالة واحدة فقط في المشروع.
الميزات: تم خصخصة المنشئ ، ويتم خصخصة الكائن ، ويوفر فقط واجهة وصول خارجية.
سيناريوهات التطبيق:
1. يحتاج النظام إلى مشاركة الموارد: مثل نظام السجل ، ومدير موارد الربيع ، إلخ.
2. من أجل التحكم في استخدام الموارد: مثل تجمع الخيوط
التطبيقات الشائعة في التنمية على مستوى المؤسسة والأطر المشتركة:
Servlets في J2EE ، مديري الموارد في الربيع (أي الفاصوليا) ، تجمعات اتصال قاعدة البيانات ، تجمعات مؤشرات الترابط ، أنظمة السجل ، عدادات موقع الويب ، إلخ.
تصنيف نمط المفرد:
1. وضع الجياع: وضع الجياع هو أبسط وضع Singleton للرمز ، ولكن يتم تحميل المثيل عند تهيئة الفصل. إذا لم يتم استخدامه على الفور ، فسيتم تحميل النظام. الرمز المحدد كما يلي:
الطبقة العامة Singleton {مثيل خاص ثابت Singleton = New Singleton () ؛ Singleton الخاص () {} ثابتة عامة Singleton getInstance () {return مثيل ؛ }}2. الوضع الكسول: بالمقارنة مع الوضع الجائع ، يتم إنشاء وضع على إنشاء وضع في الواجهة الخارجية الوحيدة للمعالجة ، مما يدرك تأخير التحميل ، وتوفير وقت تهيئة النظام ، ولكن هناك موقف تكون فيه المواضيع غير آمنة.
الطبقة العامة Singleton {مثيل خاص ثابت Singleton = null ؛ خاص singleton () {} static singleton getInstance () {if (مثيل == null) {return new singleton () ؛ } مثيل الإرجاع ؛ }}3. قفل التحقق المزدوج: وضع قفل التحقق المزدوج هو في الواقع ترقية للوضع الكسول ، مما يجعل مؤشر ترابط الوضع البطيء آمنًا. ملاحظة: هناك مشكلة في الذاكرة مع قفل التحقق المزدوج ، والذي قد يبطل قفل التحقق المزدوج.
الطبقة العامة Singleton {مثيل خاص ثابت Singleton = null ؛ خاص singleton () {} static singleton getInstance () {if (مثيل == null) {synchronized (singleton.class) {if (extal == null) {return new singleton () ؛ }} مثيل الإرجاع ؛ }}4. وضع الفئة الداخلية الثابتة: الطبقة الداخلية الثابتة لها أوضاع كسول وشر على حد سواء: آمن الخيط ، وتأخر التحميل.
الطبقة العامة singleton {private static class singletonfactory {private static singleton مثيل = جديد singleton () ؛ } singleton private () {} Singleton GetInstance () {return singletonfactory.instance ؛ }}5. وضع فئة التعداد: يجب أن يكون وضع المراهقة المفردة الأكثر مثالية ، وهو ليس فقط آمنًا لخيط الخيط ، ولكنه يمنع أيضًا مشاكل الانعكاس والانعكاس.
enum singleton {مثيل ؛ public void dosomething () {...}}مشكلة تفاصيل نمط المفرد:
1. الانعكاس يكسر وضع Singleton: يمكن أن يدمر الانعكاس تنفيذ وضع Singleton (باستثناء وضع التعداد)
/***تدمير وضع Singleton بواسطة Reflection*/public class demo01 {public static void main (string [] args) rems {singleton s1 = singleton.getinstance () ؛ Singleton S2 = Singleton.getInstance () ؛ System.out.println (S1 == S2) ؛ الفصل <Singleton> clazz = (class <Singleton>) class.forname ("com.singleton.singleton") ؛ مُنشئ <singleton> constructor = clazz.getDeclaredConstructor (null) ؛ مُنشئ. Singleton S3 = Constructor.newinstance () ؛ System.out.println (S1 == S3) ؛ }} class singleton {private static singleton extreal = new Singleton () ؛ Singleton الخاص () {// طريقة منع الانعكاس من تدمير الوضع المفرد ، افتح قسم التعليق // if (مثيل! = null) {// رمي new RunTimeException () ؛ //}} Singleton GetInstance () }}في الواقع ، فإن ما يسمى بالوقاية يعني جعل من المستحيل خلقه من خلال التفكير.
2. تخلص من النمط المفرد (باستثناء نمط فئة التعداد)
/*** يكسر Deserialization نمط Singleton*/Class Public Class Demo02 {public static void main (string [] args) يرمي الاستثناء {singleton s1 = singleton.getinstance () ؛ Singleton S2 = Singleton.getInstance () ؛ System.out.println (S1 == S2) ؛ fileOutputStream fos = new FileOutputStream ("d: //test.txt") ؛ ObjectOutputStream OOS = جديد ObjectOutputStream (FOS) ؛ OOS.WriteObject (S1) ؛ oos.close () ؛ fos.close () ؛ ObjectInputStream ois = new ObjectInputStream (FileInputStream جديد ("d: //test.txt")) ؛ Singleton S3 = (Singleton) OIS.ReadObject () ؛ System.out.println (S1 == S3) ؛ }} class singleton تنفذ مسلسل {private static singleton مثيل = جديد singleton () ؛ Singleton Singleton GetInstance () {return مثيل ؛ }.تقتصر هاتان الحالتان على الفهم ولا يتم استخدامهما كثيرًا في عملية التطوير الفعلية.
في هذه المرحلة ، يكتمل نمط المفرد.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.