سؤال

لدي مراقبون للحدث يلاحظون جميعًا نفس الحدث ، لذلك لدي فئة فائقة مجردة تلاحظ هذا الحدث ، ثم تتجاوز الفئة الفرعية / تنفذ الوظيفة المحددة.

المشكلة في ذلك هي أنها لا تلاحظ الحدث ما لم أضع طريقة مراقب الحدث في الفئة الفرعية (التي تهزم الغرض من تصميمي).

بالتأكيد يمكنني القيام بذلك بهذه الطريقة ، لكنني أريد أن أكتب ككود صغير قدر الإمكان.

هل يجب أن تعمل بهذه الطريقة (هل أفعل شيئًا آخر خاطئًا)؟

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

رمز المثال:

الفئة الفائقة:

public abstract class AbstractFileWriter
{
  public void onReady(@Observes ReadyEvent readyEvent)
  {
    try
    {
      handleReady(readyEvent, ...);
    }
  }

  protected abstract handleReady(ReadyEvent readyEvent, otherParameters go here);
}

الفئة الفرعية

public class XmlWriter extends AbstractFileWriter
{
   protected handleReady( ... )
   { ... }
}

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

والتر

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

المحلول 2

كتبت ديكور كما ذكرت أعلاه. هذا يفعل نفس الشيء بشكل أساسي ، فقط كتب بشكل مختلف قليلاً.

والتر

نصائح أخرى

إما أن تعلن الطريقة ذات الصلة في الفئة الفائقة لتكون مجردة أو تصل إلى طريقة "التفاصيل" المجردة التي تنفذها كل فئة فرعية.

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