แนวคิด
รูปแบบของมัณฑนากรที่เชื่อมโยงความรับผิดชอบกับวัตถุแบบไดนามิก เพื่อขยายฟังก์ชั่นการทำงานมัณฑนากรให้ทางเลือกที่ยืดหยุ่นมากกว่าการสืบทอด
มัณฑนากรและวัตถุที่ได้รับการตกแต่งมี supertype เดียวกัน
คุณสามารถห่อวัตถุด้วยนักตกแต่งอย่างน้อยหนึ่งคน
เนื่องจากมัณฑนากรและวัตถุที่ได้รับการตกแต่งมี supertype เหมือนกันในทุกโอกาสที่จำเป็นต้องใช้วัตถุต้นฉบับ (เขียน) วัตถุที่ตกแต่งสามารถถูกแทนที่ได้
มัณฑนากรอาจเพิ่มพฤติกรรมของตัวเองก่อนและ/หรือหลังจากการกระทำของมัณฑนากรที่ได้รับมอบหมายให้บรรลุวัตถุประสงค์เฉพาะ
วัตถุสามารถตกแต่งได้ตลอดเวลาดังนั้นวัตถุสามารถตกแต่งได้แบบไดนามิกและไม่ จำกัด ด้วยมัณฑนากรที่คุณชื่นชอบในช่วงเวลารันไทม์
ใน Java หลายชั้นเรียนภายใต้แพ็คเกจ IO เป็นศูนย์รวมของรูปแบบมัณฑนากรทั่วไปเช่น:
คลาสการตกแต่งใช้อินเทอร์เฟซเดียวกันกับคลาสที่ตกแต่ง
ชั้นเรียนที่ตกแต่งไม่สนใจว่าคลาสการใช้งานจะใช้ในการตกแต่ง
วิธีการทางธุรกิจแบบเดียวกันนี้เรียกว่าชั้นเรียนตกแต่งเพื่อเพิ่มฟังก์ชั่นของชั้นเรียนตกแต่ง
ตัวอย่าง:
แผนภาพชั้นเรียน
อินเทอร์เฟซสาธารณะ ireader {void read (); } ตัวอ่านคลาสสาธารณะใช้ iReader {@Override โมฆะสาธารณะอ่าน () {system.out.println ("อ่านของผู้อ่าน"); }} คลาสสาธารณะ BufferedReader ใช้ iReader {ส่วนตัว iReader mreader; Public BufferedReader (iReader Reader) {this.mreader = reader; } @Override โมฆะสาธารณะอ่าน () {system.out.println ("อ่านของ bufferedreader"); mreader.read (); }} การทดสอบคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {reader reader = reader ใหม่ (); reader.read (); System.out.println ("-----------"); bufferedReader bufferedReader = ใหม่ bufferedReader (reader); bufferedReader.read (); - คุณสมบัติ:
1. วัตถุตกแต่งและวัตถุจริงมีอินเทอร์เฟซเดียวกัน วิธีนี้วัตถุลูกค้าสามารถโต้ตอบกับวัตถุตกแต่งในลักษณะเดียวกับวัตถุจริง
2. วัตถุตกแต่งมีการอ้างอิงถึงวัตถุจริง
3. วัตถุตกแต่งยอมรับคำขอทั้งหมดจากลูกค้า มันส่งต่อคำขอเหล่านี้ไปยังวัตถุจริง
4. วัตถุตกแต่งสามารถเพิ่มคุณสมบัติเพิ่มเติมบางอย่างก่อนหรือหลังการส่งต่อคำขอเหล่านี้ สิ่งนี้ทำให้มั่นใจได้ว่าในรันไทม์สามารถเพิ่มฟังก์ชั่นเพิ่มเติมจากภายนอกได้โดยไม่ต้องแก้ไขโครงสร้างของวัตถุที่กำหนด
ในการออกแบบเชิงวัตถุการขยายการทำงานไปยังคลาสที่กำหนดมักจะทำได้ผ่านการสืบทอด หลังจากตกแต่งวัตถุจริงจะถูกจัดขึ้นเพื่อปรับปรุงการทำงาน
ความแตกต่างระหว่างมัณฑนากรและโหมดอะแดปเตอร์:
เกี่ยวกับความรับผิดชอบใหม่: อะแดปเตอร์ยังสามารถเพิ่มความรับผิดชอบใหม่เมื่อแปลง แต่วัตถุประสงค์หลักไม่ใช่ โมเดลมัณฑนากรส่วนใหญ่จะเพิ่มความรับผิดชอบใหม่ให้กับมัณฑนากร
เกี่ยวกับวัตถุที่ห่อ: อะแดปเตอร์รู้รายละเอียดของอะแดปเตอร์ (นั่นคือคลาสอะแดปเตอร์) มัณฑนากรเท่านั้นที่รู้ว่าอินเทอร์เฟซคืออะไร
สำหรับประเภทเฉพาะของมัน (ไม่ว่าจะเป็นคลาสพื้นฐานหรือคลาสอื่น ๆ ที่ได้รับ) มันเป็นที่รู้จักกันเฉพาะในช่วงเวลารันไทม์