سؤال

هل من الممكن أن تعشش فئة مفردة داخل فئة غير سينغليتون في C#، وإذا كان الأمر كذلك ، فهل هناك أي قيود على دورة حياة المفرد في هذه الحالة؟

public class NonSingletonClass
{
  public NonSingletonClass()
  {
    // Initialize some stuff.
  }

  // Put some methods here.

  public class SingletonClass
  {
    // Singleton construction goes here.

    // Put some methods here.
  }
}

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

تحرير: على وجه التحديد ، لدي مضيف وظيفة ينفذ المهام بناءً على مؤقت. ال NonSingletonClass في هذه الحالة ، هناك مثيل للمهمة. ال SingletonClass هو مستودع للبيانات التي تستخدمها NonSingletonClass, ، ولكن يمكن تعديلها من خارج NonSingletonClass. SingletonClass موجود لضمان أنه حتى لو كان هناك عدة NonSingletonClass الحالات ، ستظل هناك مجموعة واحدة فقط من الإرشادات والبيانات لجميعها.

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

المحلول

أعتقد أنك تبحث عن نمط أحادي

هذا الرابط هو وصف جيد لهذا ويقدم contrats بنمط مفردةنمط أحادي

نصائح أخرى

نعم ، يمكن أن يعيش المفرد بشكل مريح تمامًا داخل غير سينغليتون.

دورة حياة الطبقة المتداخلة مستقلة تمامًا على دورة حياة الطبقة الخارجية. هناك فرق ضئيل للغاية بين الطبقة المتداخلة وفئة غير متداخلة في C#. (هناك بعض الاختلافات - تتمتع الفئة المتداخلة بالوصول إلى أعضاء من القطاع الخاص في الطبقة الخارجية ، ويجب أن تكون أساليب التمديد في فئة ثابتة غير متداولة ، على سبيل المثال - لكنها لا تؤثر على دورة الحياة.

هل كان لديك قلق محدد؟

أظن أن سؤالي الأول هو هل يمكن أن تعطينا المزيد من التفاصيل التي تعتبر أنك ذكرت "تصميم طلبي هذا منطقي". المصنع التجريدي والباني هو مجرد بعض patters التي تستخدم فصول Singleton. هل تقوم بتخزين نوع من البيانات العالمية لاستخدامها في NonsingletonClass.

لا أعتقد أن هناك أي مشاكل مع المفرد المتداخل بالنظر إلى أنه لا يشير أي من الفئة إلى إشارة إلى الآخر. بالنظر إلى أنك تقول إن المفرد يوفر تخزينًا للبيانات القابلة للتغيير لعدة مثيلات ، أعتقد أن مشاكلك المحتملة ستكون مرتبطة بالتزامن.

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

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

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