2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
उत्तरदायित्वस्य श्रृङ्खला प्रतिमानं व्यवहारस्य डिजाइनप्रतिरूपं भवति यत् अनेकवस्तूनि क्रमेण अनुरोधं नियन्त्रयितुं शक्नुवन्ति, तथा च प्रत्येकं वस्तु अनुरोधं सम्पादयितुं वा अग्रिमवस्तुं प्रति प्रसारयितुं वा चयनं कर्तुं शक्नोति एतत् प्रतिरूपं अनुरोधानाम् प्रेषकस्य ग्राहकस्य च वियुग्मनं कृत्वा अधिकं लचीलतां, मापनीयतां च प्रदाति । उत्तरदायित्वशृङ्खलाप्रतिरूपस्य विस्तृतपरिचयः निम्नलिखितम् अस्ति ।
उत्तरदायित्वशृङ्खलाप्रतिरूपस्य मूलं अनुरोधशृङ्खलायाः परिकल्पना श्रृङ्खलायाः अन्त्यस्य परिचयः च भवति । एतत् बहुविधं अनुरोध-नियन्त्रण-वस्तुं श्रृङ्खलायां संयोजयति तथा च श्रृङ्खलायां यावत् श्रृङ्खलायां कोऽपि वस्तु अनुरोधं नियन्त्रयितुं न निश्चयति तावत् अनुरोधं शृङ्खलायां पारयितुं शक्नोति अनुरोधं कुर्वन् ग्राहकः न जानाति यत् श्रृङ्खलायां कोऽपि वस्तु अन्ततः अनुरोधं सम्पादयिष्यति, यत् प्रणालीं ग्राहकं प्रभावितं विना गतिशीलरूपेण पुनर्गठनं कर्तुं उत्तरदायित्वं च नियुक्तुं च शक्नोति
वर्गचित्रम् : १.
उत्तरदायित्वस्य श्रृङ्खलाप्रतिरूपे मुख्यतया निम्नलिखितभूमिकाः समाविष्टाः सन्ति ।
अमूर्त संचालक (Handler) ९. : अनुरोधानाम् संसाधनार्थं एकं अन्तरफलकं परिभाषयन्तु। आवश्यकता चेत्, अन्तरफलकं अग्रिमस्य अन्तरफलकस्य सन्दर्भं सेट् कर्तुं, प्रत्यागन्तुं च विधिं परिभाषितुं शक्नोति । एषा भूमिका प्रायः अमूर्तवर्गेण अथवा अन्तरफलकेन कार्यान्विता भवति ।
कंक्रीट संचालक : अनुरोधं प्राप्त्वा विशिष्टः संसाधकः अनुरोधं संसाधितुं वा अनुरोधं अग्रिमपक्षं प्रति प्रसारयितुं वा चयनं कर्तुं शक्नोति । यतः कंक्रीटप्रोसेसरः अग्रिमगृहस्य सन्दर्भं धारयति, अतः कंक्रीटप्रोसेसरः आवश्यकतानुसारं अग्रिमगृहं प्राप्तुं शक्नोति ।
ग्राहकवर्गः (Client) २.: एकं प्रसंस्करणशृङ्खलां निर्माय श्रृङ्खलाशिरस्य विशिष्टसंसाधकवस्तुं प्रति अनुरोधं प्रस्तौतु।
उत्तरदायित्वशृङ्खलाप्रतिरूपं निम्नलिखितपरिदृश्यानां कृते उपयुक्तम् अस्ति ।
बहुविधवस्तूनि संयुक्तरूपेण कार्यं संसाधयन्ति: उदाहरणार्थं बहुस्तरीयः अनुमोदनप्रणाली अनुमोदनस्य अधिकारस्य स्तरस्य च आधारेण अनुमोदन-अनुरोधं अनुमोदकस्य अग्रिम-स्तरं यावत् अन्तिम-अनुमोदन-परिणामं न प्राप्यते तावत् यावत् पारयति
गतिशील संयोजन प्रसंस्करण प्रवाह: उत्तरदायित्वशृङ्खलां लचीलतया विन्यस्तं कृत्वा, प्रसंस्करणवस्तूनाम् गतिशीलरूपेण संयोजयित्वा भिन्नाः संसाधनप्रक्रियाः कार्यान्वितुं शक्यन्ते ।
अनुरोधस्य प्रेषकस्य ग्राहकस्य च प्रत्यक्षयुग्मनं परिहरन्तु: अनुरोधं उत्तरदायित्वशृङ्खलायां पारयित्वा अनुरोधप्रेषकस्य विशिष्टं संसाधनवस्तुं ज्ञातुं आवश्यकता नास्ति, येन वस्तुनां मध्ये आश्रयः न्यूनीकरोति
उत्तरदायित्वशृङ्खलाप्रतिरूपस्य व्यापकरूपेण उपयोगः बहुषु क्षेत्रेषु भवति, यत्र अत्रैव सीमिताः न सन्ति:
निम्नलिखितम् उत्तरदायित्वप्रतिमानस्य श्रृङ्खलायाः सरलं कार्यान्वयनम् उदाहरणम् अस्ति, यस्य उपयोगः लॉग् सन्देशान् संसाधितुं तथा च लॉगस्तरस्य अनुसारं भिन्न-भिन्न-प्रोसेसर-भ्यः सन्देशान् प्रसारयितुं भवति (यथा DEBUG, INFO, WARN, ERROR):
- // 抽象处理者
- abstract class LogHandler {
- protected int level;
- protected LogHandler nextHandler;
-
- public void setNextHandler(LogHandler nextHandler) {
- this.nextHandler = nextHandler;
- }
-
- //这个是精髓:他除了处理自己的逻辑,还会调用nextHandler进行处理
- public void logMessage(int level, String message) {
- if (this.level <= level) {
- write(message);
- }
- if (nextHandler != null) {
- nextHandler.logMessage(level, message);
- }
- }
-
- abstract protected void write(String message);
- }
-
- // 具体处理者:ErrorLogHandler
- class ErrorLogHandler extends LogHandler {
- public ErrorLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("ErrorLogHandler: " + message);
- }
- }
-
- // 具体处理者:WarnLogHandler
- class WarnLogHandler extends LogHandler {
- public WarnLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("WarnLogHandler: " + message);
- }
- }
-
- // 具体处理者:InfoLogHandler
- class InfoLogHandler extends LogHandler {
- public InfoLogHandler(int level) {
- this.level = level;
- }
-
- @Override
- protected void write(String message) {
- System.out.println("InfoLogHandler: " + message);
- }
- }
-
- // 客户端代码
- public class ChainPatternDemo {
- private static LogHandler getChainOfLoggers() {
- // 创建链中的处理者
- LogHandler errorLogHandler = new ErrorLogHandler(3);
-
- LogHandler warnLogHandler = new WarnLogHandler(2);
- warnLogHandler.setNextHandler(errorLogHandler);
-
- LogHandler infoLogHandler = new InfoLogHandler(1);
- infoLogHandler.setNextHandler(warnLogHandler);
-
- return infoLogHandler;
- }
-
- public static void main(String[] args) {
- LogHandler loggerChain = getChainOfLoggers();
-
- loggerChain.logMessage(1, "This is an informational message.");
- loggerChain.logMessage(2, "This is a warning message.");
- loggerChain.logMessage(3, "This is an error message.");
- }
- }
अस्मिन् उदाहरणे वयं त्रीणि concrete log handler classes (ErrorLogHandler
、WarnLogHandler
、InfoLogHandler
), ते क्रमशः लॉग् सन्देशानां भिन्नस्तरं सम्पादयन्ति । प्रत्येकं हन्डलर् मध्ये एकः स्तरः (level
), अस्य स्तरस्य सन्देशाः संसाधिताः भवेयुः वा इति निर्धारयितुं प्रयुक्तम् ।आह्वानेनlogMessage
विधिः, अनुरोधः श्रृङ्खलायां प्रथमसञ्चालकं प्रति प्रसारितः भवति (infoLogHandler
), स्वस्य स्तरस्य संसाधनतर्कस्य च आधारेण सन्देशं संसाधितुं वा इति निर्णयं करोति, ततः (यदि संसाधितः न भवति) श्रृङ्खलायां अग्रिमसंसाधकं प्रति अनुरोधं प्रसारयति एषा प्रक्रिया श्रृङ्खलायाः अन्त्यपर्यन्तं वा यावत् अनुरोधस्य प्रक्रिया न भवति तावत् यावत् प्रचलति ।
ध्यानं कुर्वन्तु यत् वास्तविक-अनुप्रयोगे भवतः आवश्यकता भवितुम् अर्हतिLogHandler
वर्गः अधिकजटिल-लॉग-प्रक्रिया-तर्कस्य विन्यासस्य च समर्थनार्थं अधिकानि पद्धतीः गुणाः च योजयति । तदतिरिक्तं, लॉग् स्तराः सामान्यतया गणनानां उपयोगं कुर्वन्ति (enum
) इत्यस्य स्थाने पूर्णाङ्कानां स्थाने कोडपठनीयतायां परिपालनक्षमतायां च सुधारः भवति ।
उत्तरदायित्वस्य श्रृङ्खलाप्रतिरूपः अनुरोधानाम् लचीलाः संसाधनं प्रणालीमापनीयतां च साधयति यत् अनुरोधं सम्पादयन्तः बहुविधवस्तूनि श्रृङ्खलायां संयोजयित्वा श्रृङ्खलायां यावत् श्रृङ्खलायां वस्तु अनुरोधं नियन्त्रयितुं न निश्चयति तावत् अनुरोधं श्रृङ्खलायां पारयितुं अनुमतिं ददाति
यदि उत्तरदायित्वशृङ्खलाप्रतिरूपं भवतः कृते उपयोगी अस्ति तर्हि तत् पसन्दं कृत्वा रक्षितुं स्मर्यताम्।