บทช่วยสอน ห่วงโซ่ของรูปแบบความรับผิดชอบ ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ การแนะนำ,การสำนึก,

ห่วงโซ่ของรูปแบบความรับผิดชอบ

เป็นชื่อแนะนำโซ่ของรูปแบบความรับผิดชอบ (โซ่ของรูปแบบความรับผิดชอบ) สำหรับการร้องขอเพื่อสร้างห่วงโซ่ของวัตถุที่รับได้ ประเภทของรูปแบบที่กำหนดต่อคำขอของผู้ส่งและผู้รับ decoupling ร้องขอ ประเภทของรูปแบบการออกแบบนี้เป็นรูปแบบพฤติกรรม

ในโหมดนี้ผู้รับแต่ละคนมักจะมีการอ้างอิงไปยังผู้รับอื่น ถ้าวัตถุไม่สามารถดำเนินการตามคำขอแล้วมันจะเดียวกับการร้องขอไปยังผู้รับต่อไปและอื่น ๆ

การแนะนำ

เจตนา: หลีกเลี่ยงการขอให้ผู้ส่งและผู้รับจะคู่กันเพื่อให้วัตถุหลายมีแนวโน้มที่จะได้รับการร้องขอวัตถุเหล่านี้จะได้รับการเชื่อมต่อเข้าสู่ห่วงโซ่และผ่านการร้องขอตามห่วงโซ่จนวัตถุจัดการกับมันเพื่อให้ห่างไกล

ตัวประมวลผลห่วงโซ่หน้าที่รับผิดชอบในการจัดการการร้องขอของลูกค้าจะต้องส่งคำขอไปห่วงโซ่ของความรับผิดชอบสามารถไม่จำเป็นต้องกังวลเกี่ยวกับรายละเอียดในการประมวลผลการถ่ายโอนการร้องขอและการร้องขอเพื่อให้ห่วงโซ่ของความรับผิดชอบและขอคำขอของผู้ส่งที่: วิธีการแก้ปัญหาหลัก หลุดพ้น

เมื่อใช้: เมื่อต้องรับมือกับจำนวนมากของถนนที่จะกรองข้อความ

วิธีการแก้ไข: การเรียนการสกัดกั้นการใช้อินเตอร์เฟซแบบครบวงจร

คีย์รหัส: Handler ภายในพอลิเมอของตัวเองใน HanleRequest ที่เหมาะสมในการตรวจสอบว่าถ้าเงื่อนไขจะถูกส่งผ่านลงไม่ได้ขึ้นก่อนใครผ่านเข้ามาในชุด

ตัวอย่างการใช้งาน: 1, Dream of Red แมนชั่น "กลองผ่านที่จะใช้จ่าย."2 เหตุการณ์ JS เดือดปุด ๆ 3, Java Web เข้ารหัสใน Apache Tomcat สำหรับการประมวลผล Struts2 Interceptor, เครื่องกรอง JSP เซิร์ฟเล็ตของ

ข้อดี: 1, ลดการมีเพศสัมพันธ์มันขอให้ผู้ส่งและผู้รับ decoupling 2 วัตถุง่าย ดังนั้นวัตถุที่ไม่จำเป็นต้องรู้โครงสร้างของห่วงโซ่ 3 เพื่อเพิ่มความยืดหยุ่นในความรับผิดชอบของวัตถุที่ได้รับมอบหมาย โดยการเปลี่ยนสมาชิกในห่วงโซ่หรือระดมการสั่งซื้อของพวกเขาทำให้แบบไดนามิกเพิ่มหรือลบความรับผิด 4 เพิ่มระดับคำขอจัดการใหม่มีความสะดวกมาก

ข้อเสีย: 1, ไม่สามารถรับประกันได้ว่าการร้องขอจะต้องได้รับ2 ประสิทธิภาพของระบบจะได้รับผลกระทบ แต่สะดวกน้อยลงในช่วงการแก้จุดบกพร่องรหัสอาจทำให้เกิดการเรียกวงจร 3 อาจจะไม่ได้อย่างง่ายดายลักษณะที่สังเกตได้ Runtime ขัดขวางการแก้จุดบกพร่อง

สถานการณ์การใช้งาน: 1, วัตถุมากกว่าหนึ่งสามารถจัดการกับคำขอเดียวกันโดยเฉพาะซึ่งคัดค้านการดำเนินการตามคำขอจะถูกกำหนดโดยอัตโนมัติเวลาทำงาน2 โดยไม่ต้องระบุอย่างชัดเจนผู้รับเพื่อส่งคำขอไปยังส่วนใหญ่ของวัตถุ 3 ชุดของวัตถุที่สามารถกำหนดแบบไดนามิกเพื่อดำเนินการตามคำขอ

หมายเหตุ: พบในการใช้งานจำนวนมากใน Java Web

การสำนึก

เราสร้างAbstractLogger ระดับนามธรรมที่มีระดับการบันทึกรายละเอียดจากนั้นเราจะสร้างสามประเภทของการบันทึกมีการขยายAbstractLoggerแต่ละข้อความ Logger ระดับไม่ว่าจะเป็นระดับของตัวเองถ้ามันจะถูกพิมพ์ออกมาแล้วตามมิฉะนั้นมันจะไม่พิมพ์ข้อความไปต่อไปและบันทึก

ห่วงโซ่ของรูปแบบความรับผิดชอบแผนภาพ UML

ขั้นตอนที่ 1

สร้างระเบียนระดับนามธรรม

AbstractLogger.java

ระดับนามธรรมสาธารณะ AbstractLogger {
   สาธารณะคง int INFO = 1;
   ประชาชน DEBUG int คงที่ = 2;
   int สาธารณะข้อผิดพลาดคงที่ = 3;

   ระดับการป้องกัน int;

   // ห่วงโซ่ของความรับผิดชอบในองค์ประกอบถัดไปที่มีการป้องกัน AbstractLogger nextLogger;

   โมฆะสาธารณะ setNextLogger (AbstractLogger nextLogger) {
      this.nextLogger = nextLogger;
   }

   โมฆะสาธารณะ logMessage (ระดับ int ข้อความ String) {
      ถ้า (this.level <= ระดับ) {
         เขียน (ข้อความ);
      }
      ถ้า (nextLogger! = null) {
         nextLogger.logMessage (ระดับข้อความ);
      }
   }

   นามธรรมโมฆะป้องกันการเขียนข้อความ (String);
	
}

ขั้นตอนที่ 2

สร้างคลาสนิติบุคคลที่ขยายระดับการบันทึก

ConsoleLogger.java

เรียนสาธารณะ ConsoleLogger ขยาย AbstractLogger {

   ประชาชน ConsoleLogger (ระดับ int) {
      this.level = ระดับ;
   }

   @Override
   โมฆะป้องกันการเขียนข้อความ (String) {		
      System.out.println ( "คอนโซลมาตรฐาน :: Logger:" + ข้อความ);
   }
}

ErrorLogger.java

เรียนสาธารณะ ErrorLogger ขยาย AbstractLogger {

   ประชาชน ErrorLogger (ระดับ int) {
      this.level = ระดับ;
   }

   @Override
   โมฆะป้องกันการเขียนข้อความ (String) {		
      System.out.println ( "ข้อผิดพลาดคอนโซล :: Logger:" + ข้อความ);
   }
}

FileLogger.java

เรียนสาธารณะ FileLogger ขยาย AbstractLogger {

   ประชาชน FileLogger (ระดับ int) {
      this.level = ระดับ;
   }

   @Override
   โมฆะป้องกันการเขียนข้อความ (String) {		
      System.out.println ( "File :: Logger:" + ข้อความ);
   }
}

ขั้นตอนที่ 3

สร้างความแตกต่างของบันทึก ให้พวกเขามีระดับที่แตกต่างของความผิดพลาดและการตั้งค่าการบันทึกในแต่ละบันทึก แต่ละ Logger บันทึกตัวแทนต่อไปเป็นส่วนหนึ่งของห่วงโซ่

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;	
   }

   ประชาชนเป็นโมฆะคง main (String args []) {
      AbstractLogger loggerChain = getChainOfLoggers ();

      loggerChain.logMessage (AbstractLogger.INFO, 
         "นี่คือข้อมูล.");

      loggerChain.logMessage (AbstractLogger.DEBUG, 
         "นี่เป็นข้อมูลระดับการแก้ปัญหา.");

      loggerChain.logMessage (AbstractLogger.ERROR, 
         "นี่คือข้อมูลความผิดพลาด.");
   }
}

ขั้นตอนที่ 4

ตรวจสอบการส่งออก

มาตรฐานคอนโซล :: Logger: นี่คือข้อมูล
ไฟล์ :: Logger: นี่เป็นข้อมูลระดับการแก้ปัญหา
มาตรฐานคอนโซล :: Logger: นี่เป็นข้อมูลระดับการแก้ปัญหา
เกิดข้อผิดพลาดคอนโซล :: Logger: นี่คือข้อมูลความผิดพลาด
ไฟล์ :: Logger: นี่คือข้อมูลความผิดพลาด
มาตรฐานคอนโซล :: Logger: นี่คือข้อมูลความผิดพลาด
ห่วงโซ่ของรูปแบบความรับผิดชอบ
10/30