- דפוס שרשרת אחריות
- יתרון של שרשרת אחריות DP
- שימוש ב- DP של שרשרת האחריות
- UML של שרשרת אחריות DP
- דוגמה לשרשרת אחריות DP
בשרשרת אחריות, השולח שולח בקשה לשרשרת של אובייקטים. ניתן לטפל בבקשה על ידי כל אובייקט בשרשרת.
דפוס שרשרת אחריות אומר שפשוט 'הימנע מצימוד שולח הבקשה למקבל שלה על ידי מתן הזדמנות לאובייקטים מרובים לטפל בבקשה'. לדוגמה, כספומט משתמש בדפוס העיצוב של שרשרת האחריות בתהליך מתן כסף.
במילים אחרות, אנו יכולים לומר שבדרך כלל כל מקלט מכיל התייחסות של מקלט אחר. אם אובייקט אחד לא יכול להתמודד עם הבקשה אז הוא מעביר את אותו הדבר למקלט הבא וכן הלאה.
יתרון של דפוס שרשרת אחריות
- זה מקטין את הצימוד.
- זה מוסיף גמישות תוך הקצאת האחריות לאובייקטים.
- זה מאפשר לקבוצה של מחלקות לפעול כאחד; ניתן לשלוח אירועים שהופקו במחלקה אחת למחלקות מטפלים אחרות בעזרת קומפוזיציה.
שימוש בדפוס שרשרת האחריות:
זה משומש:
איזה אוסף בג'אווה
- כאשר יותר מאובייקט אחד יכול לטפל בבקשה והמטפל אינו ידוע.
- כאשר קבוצת האובייקטים שיכולה לטפל בבקשה חייבת להיות מוגדרת בצורה דינמית.
דוגמה לתבנית שרשרת אחריות
בואו נבין את הדוגמה של דפוס שרשרת האחריות לפי דיאגרמת UML לעיל.
דפוס UML עבור שרשרת אחריות:
יישום של UML לעיל:
שלב 1
ליצור כּוֹרֵת עֵצִים שיעור מופשט.
להחליף מחרוזת ב-Java מחרוזת
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('CONSOLE LOGGER INFO: '+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('DEBUG LOGGER INFO: '+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('ERROR LOGGER INFO: '+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, 'Enter the sequence of values '); chainLogger.logMessage(Logger.ERRORINFO, 'An error is occured now'); chainLogger.logMessage(Logger.DEBUGINFO, 'This was the error now debugging is compeled'); } } </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.javapublic class DebugBasedLogger extends Logger { public DebugBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println('DEBUG LOGGER INFO: '+msg); } }// End of the DebugBasedLogger class.
שלב 4
ליצור ErrorBasedLogger מעמד.
קובץ: ErrorBasedLogger.javapublic class ErrorBasedLogger extends Logger { public ErrorBasedLogger(int levels) { this.levels=levels; } @Override protected void displayLogInfo(String msg) { System.out.println('ERROR LOGGER INFO: '+msg); } }// End of the ErrorBasedLogger class.
שלב 5
ליצור ChainOfResponsibilityClient מעמד.
קובץ: ChainofResponsibilityClient.javapublic 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, 'Enter the sequence of values '); chainLogger.logMessage(Logger.ERRORINFO, 'An error is occured now'); chainLogger.logMessage(Logger.DEBUGINFO, 'This was the error now debugging is compeled'); } }
הורד את הדוגמה הזו
תְפוּקָה
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=levels){>