Latest web development tutorials
×

设计模式 หลักสูตร

รูปแบบการออกแบบ รู้เบื้องต้นเกี่ยวกับรูปแบบการออกแบบ โหมดโรงงาน แบบโรงงานย่อ รูปแบบเดี่ยว รุ่นสร้าง รุ่นต้นแบบ อะแดปเตอร์รุ่น สะพานโหมด รูปแบบตัวกรอง โหมดการทำงานร่วมกัน มัณฑนากร รูปแบบซุ้ม ฟลายเวท โหมดพร็อกซี่ ห่วงโซ่ของรูปแบบความรับผิดชอบ โหมดคำสั่ง รูปแบบล่าม โหมดซ้ำแล้วซ้ำอีก รูปแบบที่เป็นสื่อกลาง รูปแบบของที่ระลึก รูปแบบการสังเกตการณ์ รูปแบบของรัฐ null Object Model โหมดกลยุทธ์ โหมดแม่แบบ รูปแบบของผู้เข้าชม MVC โหมด โหมดตัวแทน โหมดนิติบุคคลองค์ประกอบ รูปแบบการเข้าถึงข้อมูลของวัตถุ รูปแบบการควบคุมด้านหน้า intercepting รูปแบบตัวกรอง รูปแบบการบริการผู้แทนจำหน่าย วัตถุ Transfer รุ่น

设计模式其他

ทรัพยากรโหมดออกแบบ

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

เป็นชื่อแนะนำโซ่ของรูปแบบความรับผิดชอบ (โซ่ของรูปแบบความรับผิดชอบ) สำหรับการร้องขอเพื่อสร้างห่วงโซ่ของวัตถุที่รับได้ ประเภทของรูปแบบที่กำหนดต่อคำขอของผู้ส่งและผู้รับ 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: นี่คือข้อมูลความผิดพลาด