متى يعتقد المجتمع أنه من المناسب استخدام Singleton؟[ينسخ]

StackOverflow https://stackoverflow.com/questions/138124

  •  02-07-2019
  •  | 
  •  

سؤال

التكرار المحتمل:
سينجلتون:كيف ينبغي أن تستخدم ذلك

متابعةً للسؤال السابق الرائع الذي طرحه إيوان ميكبيس حول نمط المفردة، اعتقدت أنني سأسأل "متى يعتقد المجتمع أنه من المناسب استخدام المفردة؟"

اسمحوا لي أن أقدم مثالا للنقد:

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

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

ما هي الاستخدامات الصالحة الأخرى للSingletons التي قد تكون هناك؟

هل كانت مفيدة؟

المحلول

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

أنظر أيضا هذا الموضوع: الأمثلة الأكثر شيوعًا لإساءة استخدام فئة المفردة

نصائح أخرى

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

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

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

إذا كان وقت الاتصال الأولي للكاميرا بطيئًا أيضًا، فقد يكون إبقاء الاتصال مفتوحًا بهذه الطريقة بدلاً من فتح الاتصال، والتقاط صورة وإغلاق الاتصال مرة أخرى أكثر كفاءة.

في الواقع لم أستخدم قطًا مفردًا، لكن لم أستخدم أنماط التصميم كثيرًا.أعتقد أنها ذات قيمة كبيرة عندما تتطلبها أنماط أخرى مثل أنماط المصنع والبوابة.ومع ذلك، فإنهم تقريبًا لا يكونون جيدين بمفردهم.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top