प्रौद्योगिकी साझेदारी

उत्तरदायित्व पैटर्नस्य डिजाइन पैटर्न श्रृङ्खला

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

उत्तरदायित्वस्य श्रृङ्खला प्रतिमानं व्यवहारस्य डिजाइनप्रतिरूपं भवति यत् अनेकवस्तूनि क्रमेण अनुरोधं नियन्त्रयितुं शक्नुवन्ति, तथा च प्रत्येकं वस्तु अनुरोधं सम्पादयितुं वा अग्रिमवस्तुं प्रति प्रसारयितुं वा चयनं कर्तुं शक्नोति एतत् प्रतिरूपं अनुरोधानाम् प्रेषकस्य ग्राहकस्य च वियुग्मनं कृत्वा अधिकं लचीलतां, मापनीयतां च प्रदाति । उत्तरदायित्वशृङ्खलाप्रतिरूपस्य विस्तृतपरिचयः निम्नलिखितम् अस्ति ।

1. परिभाषा मूलविचाराः च

उत्तरदायित्वशृङ्खलाप्रतिरूपस्य मूलं अनुरोधशृङ्खलायाः परिकल्पना श्रृङ्खलायाः अन्त्यस्य परिचयः च भवति । एतत् बहुविधं अनुरोध-नियन्त्रण-वस्तुं श्रृङ्खलायां संयोजयति तथा च श्रृङ्खलायां यावत् श्रृङ्खलायां कोऽपि वस्तु अनुरोधं नियन्त्रयितुं न निश्चयति तावत् अनुरोधं शृङ्खलायां पारयितुं शक्नोति अनुरोधं कुर्वन् ग्राहकः न जानाति यत् श्रृङ्खलायां कोऽपि वस्तु अन्ततः अनुरोधं सम्पादयिष्यति, यत् प्रणालीं ग्राहकं प्रभावितं विना गतिशीलरूपेण पुनर्गठनं कर्तुं उत्तरदायित्वं च नियुक्तुं च शक्नोति

2. वर्गचित्रं मुख्यभूमिकाः च

वर्गचित्रम् : १.

उत्तरदायित्वस्य श्रृङ्खलाप्रतिरूपे मुख्यतया निम्नलिखितभूमिकाः समाविष्टाः सन्ति ।

  1. अमूर्त संचालक (Handler) ९. : अनुरोधानाम् संसाधनार्थं एकं अन्तरफलकं परिभाषयन्तु। आवश्यकता चेत्, अन्तरफलकं अग्रिमस्य अन्तरफलकस्य सन्दर्भं सेट् कर्तुं, प्रत्यागन्तुं च विधिं परिभाषितुं शक्नोति । एषा भूमिका प्रायः अमूर्तवर्गेण अथवा अन्तरफलकेन कार्यान्विता भवति ।

  2. कंक्रीट संचालक : अनुरोधं प्राप्त्वा विशिष्टः संसाधकः अनुरोधं संसाधितुं वा अनुरोधं अग्रिमपक्षं प्रति प्रसारयितुं वा चयनं कर्तुं शक्नोति । यतः कंक्रीटप्रोसेसरः अग्रिमगृहस्य सन्दर्भं धारयति, अतः कंक्रीटप्रोसेसरः आवश्यकतानुसारं अग्रिमगृहं प्राप्तुं शक्नोति ।

  3. ग्राहकवर्गः (Client) २.: एकं प्रसंस्करणशृङ्खलां निर्माय श्रृङ्खलाशिरस्य विशिष्टसंसाधकवस्तुं प्रति अनुरोधं प्रस्तौतु।

3. प्रयोज्यपरिदृश्यानि

उत्तरदायित्वशृङ्खलाप्रतिरूपं निम्नलिखितपरिदृश्यानां कृते उपयुक्तम् अस्ति ।

  1. बहुविधवस्तूनि संयुक्तरूपेण कार्यं संसाधयन्ति: उदाहरणार्थं बहुस्तरीयः अनुमोदनप्रणाली अनुमोदनस्य अधिकारस्य स्तरस्य च आधारेण अनुमोदन-अनुरोधं अनुमोदकस्य अग्रिम-स्तरं यावत् अन्तिम-अनुमोदन-परिणामं न प्राप्यते तावत् यावत् पारयति

  2. गतिशील संयोजन प्रसंस्करण प्रवाह: उत्तरदायित्वशृङ्खलां लचीलतया विन्यस्तं कृत्वा, प्रसंस्करणवस्तूनाम् गतिशीलरूपेण संयोजयित्वा भिन्नाः संसाधनप्रक्रियाः कार्यान्वितुं शक्यन्ते ।

  3. अनुरोधस्य प्रेषकस्य ग्राहकस्य च प्रत्यक्षयुग्मनं परिहरन्तु: अनुरोधं उत्तरदायित्वशृङ्खलायां पारयित्वा अनुरोधप्रेषकस्य विशिष्टं संसाधनवस्तुं ज्ञातुं आवश्यकता नास्ति, येन वस्तुनां मध्ये आश्रयः न्यूनीकरोति

4. लाभाः हानिः च

लाभ
  1. युग्मनं न्यूनीकरोतु: अनुरोधस्य प्रेषकं ग्राहकं च वियुग्मयति, अनुरोधः केवलं प्रेषितः भवति, भवेत् कोऽपि तत् सम्पादयति।
  2. वस्तुनियुक्तौ लचीलापनं वर्धितम्: श्रृङ्खलायाः अन्तः सदस्यान् परिवर्त्य वा तेषां क्रमं चालयित्वा वा उत्तरदायित्वस्य गतिशीलं परिवर्तनं वा विलोपनं वा अनुमन्यते।
  3. वस्तुनः सरलीकरणं कुर्वन्तु: वस्तुनः श्रृङ्खलायाः संरचनां ज्ञातुं आवश्यकता नास्ति।
  4. नूतनान् अनुरोधसंसाधनवर्गान् योजयितुं सुविधाजनकम् अस्ति: उद्घाटनस्य समापनस्य च सिद्धान्तस्य अनुसरणं कृत्वा विद्यमानसङ्केतं परिवर्तनं विना कदापि उत्तरदायित्वशृङ्खलायां नूतनाः प्रोसेसराः योजयितुं शक्यन्ते, येन उत्तमं मापनीयता प्राप्यते
अभावः
  1. अनुरोधः स्वीकृतः भविष्यति इति गारण्टी नास्ति: यदि उत्तरदायित्वशृङ्खला सम्यक् विन्यस्ता नास्ति, अथवा कश्चन संसाधकः अनुरोधं सम्यक् न सम्पादयति तर्हि अनुरोधः संसाधितः न भवितुम् अर्हति ।
  2. कार्यप्रदर्शनस्य विषयाः: यदा उत्तरदायित्वशृङ्खला अतिदीर्घा भवति अथवा उत्तरदायित्वशृङ्खलायां बहुधा अनुरोधाः पारिताः भवन्ति तदा कार्यप्रदर्शनं प्रभावितं भवितुम् अर्हति।
  3. त्रुटिनिवारणं असुविधाजनकम् अस्ति: यदा उत्तरदायित्वस्य श्रृङ्खला विशेषतया दीर्घा भवति तथा च बहवः लिङ्काः सन्ति तदा पुनरावर्तनीयपद्धत्या त्रुटिनिवारणस्य समये तर्कः अधिकं जटिलः भवितुम् अर्हति

5. अनुप्रयोगपरिदृश्यानि

उत्तरदायित्वशृङ्खलाप्रतिरूपस्य व्यापकरूपेण उपयोगः बहुषु क्षेत्रेषु भवति, यत्र अत्रैव सीमिताः न सन्ति:

  1. लॉगिंग प्रणाली: लॉग् स्तरस्य अनुसारं भिन्न-भिन्न-लॉगर्-इत्यस्मै लॉग-सन्देशान् प्रसारयन्तु, यथा कन्सोल्-लॉगर्, सञ्चिका-लॉगर्, डाटाबेस्-लॉगर् इत्यादयः ।
  2. अपवाद निबन्धन प्रणाली: अपवादानाम् प्रकारानुसारं वर्गीकरणं कुर्वन्तु, यथा लॉगिंग्, ईमेल-सूचना, अपवाद-प्रदर्शनम् इत्यादयः ।
  3. बहुस्तरीय अनुमोदन प्रणाली: यथा अवकाश-अनुमोदनम्, क्रय-अनुमोदनम् इत्यादयः अनुमोदन-अनुरोधः अनुमोदकस्य अधिकारानुसारं स्तरस्य च अनुसारं अग्रिम-स्तरस्य अनुमोदकस्य कृते पारितः भवति।

6. कार्यान्वयनस्य उदाहरणानि

निम्नलिखितम् उत्तरदायित्वप्रतिमानस्य श्रृङ्खलायाः सरलं कार्यान्वयनम् उदाहरणम् अस्ति, यस्य उपयोगः लॉग् सन्देशान् संसाधितुं तथा च लॉगस्तरस्य अनुसारं भिन्न-भिन्न-प्रोसेसर-भ्यः सन्देशान् प्रसारयितुं भवति (यथा DEBUG, INFO, WARN, ERROR):

  1. // 抽象处理者
  2. abstract class LogHandler {
  3. protected int level;
  4. protected LogHandler nextHandler;
  5. public void setNextHandler(LogHandler nextHandler) {
  6. this.nextHandler = nextHandler;
  7. }
  8. //这个是精髓:他除了处理自己的逻辑,还会调用nextHandler进行处理
  9. public void logMessage(int level, String message) {
  10. if (this.level <= level) {
  11. write(message);
  12. }
  13. if (nextHandler != null) {
  14. nextHandler.logMessage(level, message);
  15. }
  16. }
  17. abstract protected void write(String message);
  18. }
  19. // 具体处理者:ErrorLogHandler
  20. class ErrorLogHandler extends LogHandler {
  21. public ErrorLogHandler(int level) {
  22. this.level = level;
  23. }
  24. @Override
  25. protected void write(String message) {
  26. System.out.println("ErrorLogHandler: " + message);
  27. }
  28. }
  29. // 具体处理者:WarnLogHandler
  30. class WarnLogHandler extends LogHandler {
  31. public WarnLogHandler(int level) {
  32. this.level = level;
  33. }
  34. @Override
  35. protected void write(String message) {
  36. System.out.println("WarnLogHandler: " + message);
  37. }
  38. }
  39. // 具体处理者:InfoLogHandler
  40. class InfoLogHandler extends LogHandler {
  41. public InfoLogHandler(int level) {
  42. this.level = level;
  43. }
  44. @Override
  45. protected void write(String message) {
  46. System.out.println("InfoLogHandler: " + message);
  47. }
  48. }
  49. // 客户端代码
  50. public class ChainPatternDemo {
  51. private static LogHandler getChainOfLoggers() {
  52. // 创建链中的处理者
  53. LogHandler errorLogHandler = new ErrorLogHandler(3);
  54. LogHandler warnLogHandler = new WarnLogHandler(2);
  55. warnLogHandler.setNextHandler(errorLogHandler);
  56. LogHandler infoLogHandler = new InfoLogHandler(1);
  57. infoLogHandler.setNextHandler(warnLogHandler);
  58. return infoLogHandler;
  59. }
  60. public static void main(String[] args) {
  61. LogHandler loggerChain = getChainOfLoggers();
  62. loggerChain.logMessage(1, "This is an informational message.");
  63. loggerChain.logMessage(2, "This is a warning message.");
  64. loggerChain.logMessage(3, "This is an error message.");
  65. }
  66. }

अस्मिन् उदाहरणे वयं त्रीणि concrete log handler classes (ErrorLogHandlerWarnLogHandlerInfoLogHandler ), ते क्रमशः लॉग् सन्देशानां भिन्नस्तरं सम्पादयन्ति । प्रत्येकं हन्डलर् मध्ये एकः स्तरः (level ), अस्य स्तरस्य सन्देशाः संसाधिताः भवेयुः वा इति निर्धारयितुं प्रयुक्तम् ।आह्वानेनlogMessageविधिः, अनुरोधः श्रृङ्खलायां प्रथमसञ्चालकं प्रति प्रसारितः भवति (infoLogHandler ), स्वस्य स्तरस्य संसाधनतर्कस्य च आधारेण सन्देशं संसाधितुं वा इति निर्णयं करोति, ततः (यदि संसाधितः न भवति) श्रृङ्खलायां अग्रिमसंसाधकं प्रति अनुरोधं प्रसारयति एषा प्रक्रिया श्रृङ्खलायाः अन्त्यपर्यन्तं वा यावत् अनुरोधस्य प्रक्रिया न भवति तावत् यावत् प्रचलति ।

ध्यानं कुर्वन्तु यत् वास्तविक-अनुप्रयोगे भवतः आवश्यकता भवितुम् अर्हतिLogHandler वर्गः अधिकजटिल-लॉग-प्रक्रिया-तर्कस्य विन्यासस्य च समर्थनार्थं अधिकानि पद्धतीः गुणाः च योजयति । तदतिरिक्तं, लॉग् स्तराः सामान्यतया गणनानां उपयोगं कुर्वन्ति (enum) इत्यस्य स्थाने पूर्णाङ्कानां स्थाने कोडपठनीयतायां परिपालनक्षमतायां च सुधारः भवति ।

7. उपसंहारः

उत्तरदायित्वस्य श्रृङ्खलाप्रतिरूपः अनुरोधानाम् लचीलाः संसाधनं प्रणालीमापनीयतां च साधयति यत् अनुरोधं सम्पादयन्तः बहुविधवस्तूनि श्रृङ्खलायां संयोजयित्वा श्रृङ्खलायां यावत् श्रृङ्खलायां वस्तु अनुरोधं नियन्त्रयितुं न निश्चयति तावत् अनुरोधं श्रृङ्खलायां पारयितुं अनुमतिं ददाति

यदि उत्तरदायित्वशृङ्खलाप्रतिरूपं भवतः कृते उपयोगी अस्ति तर्हि तत् पसन्दं कृत्वा रक्षितुं स्मर्यताम्।