บทช่วยสอน ห่วงโซ่ของรูปแบบความรับผิดชอบ ที่ดีที่สุดในปี 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 ระดับไม่ว่าจะเป็นระดับของตัวเองถ้ามันจะถูกพิมพ์ออกมาแล้วตามมิฉะนั้นมันจะไม่พิมพ์ข้อความไปต่อไปและบันทึก
สร้างระเบียนระดับนามธรรม
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); }
สร้างคลาสนิติบุคคลที่ขยายระดับการบันทึก
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:" + ข้อความ); } }
สร้างความแตกต่างของบันทึก ให้พวกเขามีระดับที่แตกต่างของความผิดพลาดและการตั้งค่าการบันทึกในแต่ละบันทึก แต่ละ 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, "นี่คือข้อมูลความผิดพลาด."); } }
ตรวจสอบการส่งออก
มาตรฐานคอนโซล :: Logger: นี่คือข้อมูล ไฟล์ :: Logger: นี่เป็นข้อมูลระดับการแก้ปัญหา มาตรฐานคอนโซล :: Logger: นี่เป็นข้อมูลระดับการแก้ปัญหา เกิดข้อผิดพลาดคอนโซล :: Logger: นี่คือข้อมูลความผิดพลาด ไฟล์ :: Logger: นี่คือข้อมูลความผิดพลาด มาตรฐานคอนโซล :: Logger: นี่คือข้อมูลความผิดพลาด