Latest web development tutorials

سلسلة من نمط المسؤولية

وكما يوحي اسمها، سلسلة من نمط المسؤولية (سلسلة من نمط المسؤولية) لطلب لإنشاء سلسلة من كائن المتلقي. هذا النوع من نمط معين للطلب، المرسل والمتلقي من طلب فك الارتباط. هذا النوع من أنماط التصميم تنتمي الأنماط السلوكية.

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

مقدمة

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

المعالج المعالج سلسلة اجب مسؤولة عن التعامل مع طلبات، يحتاج العملاء فقط لإرسال الطلب إلى سلسلة من المسؤولية يمكن، ليس من الضروري تهم تصنيع التفاصيل نقل الطلب وطلبات، وبالتالي فإن سلسلة المسؤولية وطلبطلب المرسل: الحل الرئيسي تنفصل.

متى تستخدم: عند التعامل مع الكثير من الطرق لتصفية الرسائل.

كيفية إصلاح: الطبقات اعتراض تنفيذ واجهة موحدة.

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

أمثلة التطبيق: 1، حلم القصور الحمراء "تمرير التطبيل لقضاء".2، والأحداث شبيبة محتدما. 3، جافا WEB ترميز في القط أباتشي للتجهيز، Struts2 اعتراضية، تصفية التخطيط الاستراتيجي المشترك بريمج ل.

المزايا: 1، والحد من اقتران.وتطلب من المرسل والمتلقي فك الارتباط. 2، وجوه مبسطة. ذلك أن الأجسام لا تحتاج إلى معرفة بنية السلسلة. 3، لتعزيز المرونة من مسؤوليات الكائن المعين. عن طريق تغيير أعضاء سلسلة أو تعبئة ترتيبها، مما يتيح إضافة الحيوية أو حذف المسؤولية. 4، إضافة فئة طلب معالج جديدة ومريحة للغاية.

العيوب: 1، لا يمكن أن تضمن أن الطلب يجب أن ترد.2، وسوف تتأثر أداء النظام، ولكن أقل مريحة أثناء تصحيح التعليمات البرمجية قد يتسبب في دعوة دورة. 3، قد لا تكون الخصائص التي يمكن ملاحظتها بسهولة وقت تعيق التصحيح.

سيناريوهات الاستخدام: 1، ويمكن أكثر من كائن واحد التعامل مع نفس الطلب، على وجه التحديد التي تعترض على معالجة الطلب يتحدد تلقائيا من قبل وقت التشغيل.2، من دون صراحة تحديد المتلقي لتقديم طلب إلى عدد وافر من الأشياء. 3، ومجموعة من الأشياء يمكن تعيين حيوي لمعالجة الطلب.

ملاحظة: واجه في العديد من التطبيقات في جافا ويب.

تحقيق

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

سلسلة من نمط مسؤولية UML الرسم البياني

خطوة 1

إنشاء سجل فئة مجردة.

AbstractLogger.java

فئة مجردة العامة AbstractLogger {
   العام ثابت كثافة العمليات INFO = 1؛
   العام ثابت الباحث DEBUG = 2؛
   العام ثابت الباحث خطأ = 3؛

   مستوى كثافة المحمية؛

   // سلسلة من المسؤولية في العنصر التالي باي AbstractLogger nextLogger.

   setNextLogger الفراغ الجمهور (AbstractLogger nextLogger) {
      this.nextLogger = nextLogger.
   }

   logMessage الجمهور باطلة (مستوى كثافة العمليات، رسالة سلسلة) {
      إذا (this.level <= مستوى) {
         الكتابة (رسالة)؛
      }
      إذا (nextLogger! = فارغة) {
         nextLogger.logMessage (المستوى، رسالة)؛
      }
   }

   مجردة محمي ضد الكتابة باطل (رسالة سلسلة)؛
	
}

خطوة 2

إنشاء فصول كيان التي تمتد الطبقة قياسية.

ConsoleLogger.java

الطبقة العامة ConsoleLogger يمتد AbstractLogger {

   الجمهور ConsoleLogger (مستوى كثافة العمليات) {
      this.level = مستوى.
   }

   Override
   محمي ضد الكتابة باطل (رسالة سلسلة) {		
      System.out.println ( "وحدة التحكم القياسية :: المسجل:" + رسالة)؛
   }
}

ErrorLogger.java

الطبقة العامة ErrorLogger يمتد AbstractLogger {

   الجمهور ErrorLogger (مستوى كثافة العمليات) {
      this.level = مستوى.
   }

   Override
   محمي ضد الكتابة باطل (رسالة سلسلة) {		
      System.out.println ( "خطأ وحدة التحكم :: المسجل:" + رسالة)؛
   }
}

FileLogger.java

الطبقة العامة FileLogger يمتد AbstractLogger {

   الجمهور FileLogger (مستوى كثافة العمليات) {
      this.level = مستوى.
   }

   Override
   محمي ضد الكتابة باطل (رسالة سلسلة) {		
      System.out.println ( "ملف :: المسجل:" + رسالة)؛
   }
}

خطوة 3

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

ChainPatternDemo.java

الطبقة العامة ChainPatternDemo {
	
   getChainOfLoggers AbstractLogger ثابت الخاص () {

      AbstractLogger errorLogger = ErrorLogger الجديدة (AbstractLogger.ERROR)؛
      AbstractLogger fileLogger = جديد FileLogger (AbstractLogger.DEBUG)؛
      AbstractLogger consoleLogger = جديد ConsoleLogger (AbstractLogger.INFO)؛

      errorLogger.setNextLogger (fileLogger)؛
      fileLogger.setNextLogger (consoleLogger)؛

      العودة errorLogger.	
   }

   (وسائط سلسلة []) العامة ساكنة باطلة الرئيسية {
      AbstractLogger loggerChain = getChainOfLoggers ()؛

      loggerChain.logMessage (AbstractLogger.INFO، 
         "هذا هو المعلومات.")؛

      loggerChain.logMessage (AbstractLogger.DEBUG، 
         "هذا هو المعلومات مستوى التصحيح.")؛

      loggerChain.logMessage (AbstractLogger.ERROR، 
         "هذا هو معلومات الخطأ.")؛
   }
}

خطوة 4

تحقق من الانتاج.

المسجل وحدة التحكم القياسية ::: هذا هو المعلومات.
ملف :: المسجل: هذا هو المعلومات مستوى التصحيح.
المسجل وحدة التحكم القياسية ::: هذا هو المعلومات مستوى التصحيح.
المسجل خطأ وحدة التحكم ::: هذا هو المعلومات الخطأ.
ملف :: المسجل: هذا هو معلومات الخطأ.
المسجل وحدة التحكم القياسية ::: هذا هو معلومات الخطأ.