logo

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

  1. نمط سلسلة المسؤولية
  2. الاستفادة من سلسلة المسؤولية DP
  3. استخدام سلسلة المسؤولية DP
  4. UML لسلسلة المسؤولية DP
  5. مثال على سلسلة المسؤولية DP

في سلسلة المسؤولية، يرسل المرسل طلبًا إلى سلسلة من الكائنات. يمكن معالجة الطلب بواسطة أي كائن في السلسلة.

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

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


الاستفادة من نمط سلسلة المسؤولية

  • أنه يقلل من اقتران.
  • يضيف المرونة أثناء إسناد المسؤوليات إلى الكائنات.
  • يسمح لمجموعة من الفئات بالعمل كواحدة؛ يمكن إرسال الأحداث المنتجة في فئة واحدة إلى فئات معالج أخرى بمساعدة التكوين.

استخدام نمط سلسلة المسؤولية:

يتم استخدامها:

تحقق bash من تعيين متغير البيئة
  • عندما يتمكن أكثر من كائن واحد من معالجة الطلب ويكون المعالج غير معروف.
  • عندما يجب تحديد مجموعة الكائنات التي يمكنها التعامل مع الطلب بطريقة ديناميكية.

مثال على نمط سلسلة المسؤولية

دعونا نفهم مثال نمط سلسلة المسؤولية من خلال مخطط UML أعلاه.

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

تنفيذ UML أعلاه:

الخطوة 1

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

 public abstract class Logger { public static int OUTPUTINFO=1; public static int ERRORINFO=2; public static int DEBUGINFO=3; protected int levels; protected Logger nextLevelLogger; public void setNextLevelLogger(Logger nextLevelLogger) { this.nextLevelLogger = nextLevelLogger; } public void logMessage(int levels, String msg){ if(this.levels<=levels){ displayloginfo(msg); } if (nextlevellogger!="null)" { nextlevellogger.logmessage(levels, msg); protected abstract void displayloginfo(string < pre> <h4>Step 2</h4> <p> Create a <b>ConsoleBasedLogger</b> class.</p> File: ConsoleBasedLogger.java <pre> public class ConsoleBasedLogger extends Logger { public ConsoleBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;CONSOLE LOGGER INFO: &apos;+msg); } } </pre> <h4>Step 3</h4> <p>Create a <b>DebugBasedLogger</b> class.</p> File: DebugBasedLogger.java <pre> public class DebugBasedLogger extends Logger { public DebugBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;DEBUG LOGGER INFO: &apos;+msg); } }// End of the DebugBasedLogger class. </pre> <h4>Step 4</h4> <p>Create a <b>ErrorBasedLogger</b> class.</p> File: ErrorBasedLogger.java <pre> public class ErrorBasedLogger extends Logger { public ErrorBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;ERROR LOGGER INFO: &apos;+msg); } }// End of the ErrorBasedLogger class. </pre> <h4>Step 5</h4> <p>Create a <b>ChainOfResponsibilityClient</b> class.</p> File: ChainofResponsibilityClient.java <pre> public class ChainofResponsibilityClient { private static Logger doChaining(){ Logger consoleLogger = new ConsoleBasedLogger(Logger.OUTPUTINFO); Logger errorLogger = new ErrorBasedLogger(Logger.ERRORINFO); consoleLogger.setNextLevelLogger(errorLogger); Logger debugLogger = new DebugBasedLogger(Logger.DEBUGINFO); errorLogger.setNextLevelLogger(debugLogger); return consoleLogger; } public static void main(String args[]){ Logger chainLogger= doChaining(); chainLogger.logMessage(Logger.OUTPUTINFO, &apos;Enter the sequence of values &apos;); chainLogger.logMessage(Logger.ERRORINFO, &apos;An error is occured now&apos;); chainLogger.logMessage(Logger.DEBUGINFO, &apos;This was the error now debugging is compeled&apos;); } } </pre> <hr> download this example <h4>Output</h4> <pre> bilityClient CONSOLE LOGGER INFO: Enter the sequence of values CONSOLE LOGGER INFO: An error is occured now ERROR LOGGER INFO: An error is occured now CONSOLE LOGGER INFO: This was the error now debugging is compeled ERROR LOGGER INFO: This was the error now debugging is compeled DEBUG LOGGER INFO: This was the error now debugging is compeled </pre></=levels){>

الخطوه 3

إنشاء DebugBasedLogger فصل.

لينكس إيبكنفيغ الحرة
الملف: DebugBasedLogger.java
 public class DebugBasedLogger extends Logger { public DebugBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;DEBUG LOGGER INFO: &apos;+msg); } }// End of the DebugBasedLogger class. 

الخطوة 4

إنشاء ErrorBasedLogger فصل.

الملف: ErrorBasedLogger.java
 public class ErrorBasedLogger extends Logger { public ErrorBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println(&apos;ERROR LOGGER INFO: &apos;+msg); } }// End of the ErrorBasedLogger class. 

الخطوة 5

إنشاء ChainOfResponsibilityClient فصل.

الملف: ChainofResponsibilityClient.java
 public class ChainofResponsibilityClient { private static Logger doChaining(){ Logger consoleLogger = new ConsoleBasedLogger(Logger.OUTPUTINFO); Logger errorLogger = new ErrorBasedLogger(Logger.ERRORINFO); consoleLogger.setNextLevelLogger(errorLogger); Logger debugLogger = new DebugBasedLogger(Logger.DEBUGINFO); errorLogger.setNextLevelLogger(debugLogger); return consoleLogger; } public static void main(String args[]){ Logger chainLogger= doChaining(); chainLogger.logMessage(Logger.OUTPUTINFO, &apos;Enter the sequence of values &apos;); chainLogger.logMessage(Logger.ERRORINFO, &apos;An error is occured now&apos;); chainLogger.logMessage(Logger.DEBUGINFO, &apos;This was the error now debugging is compeled&apos;); } } 

قم بتنزيل هذا المثال

انتاج |

 bilityClient CONSOLE LOGGER INFO: Enter the sequence of values CONSOLE LOGGER INFO: An error is occured now ERROR LOGGER INFO: An error is occured now CONSOLE LOGGER INFO: This was the error now debugging is compeled ERROR LOGGER INFO: This was the error now debugging is compeled DEBUG LOGGER INFO: This was the error now debugging is compeled