Decorator Blockingqueue الذي يسجل الأشياء التي تم إزالتها
-
04-10-2019 - |
سؤال
انا املك BlockingQueue
التنفيذ الذي يتم استخدامه في وضع المنتج المستهلك. أود تزيين قائمة الانتظار هذه بحيث يتم تسجيل كل كائن مأخوذ منه. أعرف كيف سيبدو التنفيذ المباشر: ما عليك سوى التنفيذ BlockingQueue
وقبول أ BlockingQueue
في المُنشئ الذي ستحصل عليه جميع الأساليب. هل هناك طريقة أخرى في عداد المفقودين؟ مكتبة ربما؟ شيء مع واجهة رد الاتصال؟
المحلول
بديل قد ترغب في مراعاته الوكلاء الديناميكي. يتيح لك ذلك استخدام واجهة برمجة تطبيقات على غرار الانعكاس من أجل معالجة الطلبات المقدمة على واجهة معينة - سيكون من السهل جدًا تفويض جميع المكالمات إلى التنفيذ الأساسي ، مع إضافة بعض منطق التسجيل إذا كان اسم الطريقة مطابقة إحدى طرق الاستيلاء.
عيب هذا النهج هو أنه يضيف القليل من النفقات العامة إلى جميع مكالمات الطريقة (بالتأكيد ضئيلة للاستخدام العام على الرغم من أن هذا يجب أن يكون علامة صفراء إذا تم استخدام . في نهاية المطاف ، ما تفعله هو تحديد نفس السلوك الذي تصفه في رسالتك ، إلا أنك لا تحتاج إلى كتابة كل طريقة تفويض بشكل صريح ولكنها توفر نوعًا من التنفيذ المحبب.
نصائح أخرى
لقد اعتقدت أنه سيكون من الأسهل إنشاء فئة توسيع فئة التنفيذ ذات الصلة لـ BlockingQueue
الواجهة ، ويتجاوز remove
الطريقة ، وغيرها كما هو مطلوب.
تعديل
يعد إنشاء Wrapper تطبيقًا أفضل إذا كان OP يستخدم أكثر من تطبيق واحد BlockingQueue
, ، لكنه يقدم أداءً صغيرًا الكل العمليات ، وغيرها من القضايا البسيطة.
نقطتي هي أن تمديد فئة قائمة الانتظار هو بديل للفه. ما إذا كان بديل أفضل يعتمد على الظروف.