โหมดมัณฑนากรคืออะไร?
เพิ่มความรับผิดชอบพิเศษให้กับวัตถุแบบไดนามิก ในแง่ของการเพิ่มฟังก์ชั่นโหมดตกแต่งมีความยืดหยุ่นมากกว่าการสร้างคลาสย่อย
1. โครงสร้าง
ส่วนประกอบ: กำหนดอินเทอร์เฟซวัตถุที่สามารถเพิ่มความรับผิดชอบให้กับวัตถุเหล่านี้แบบไดนามิก
ส่วนประกอบอินเตอร์เฟส {การดำเนินการโมฆะสาธารณะ ();} concretecomponent: ใช้อินเตอร์เฟสที่กำหนดโดยส่วนประกอบ คลาส Concretecomponent ใช้ส่วนประกอบ {@Override Public Void Operation () {System.out.println ("พฤติกรรมเริ่มต้น"); - มัณฑนากร: ตกแต่งคลาสนามธรรม, สืบทอดส่วนประกอบ, ขยายฟังก์ชั่นของคลาสส่วนประกอบจากคลาสภายนอก แต่สำหรับส่วนประกอบไม่จำเป็นต้องรู้การมีอยู่ของมัณฑนากร
ชั้นเรียน Decorator ใช้ส่วนประกอบ {// ถือวัตถุส่วนประกอบและสร้างความสัมพันธ์ในการรวมกับองค์ประกอบส่วนประกอบที่ป้องกันส่วนประกอบ; // ส่งผ่านในวัตถุที่จะได้รับการแก้ไขเพิ่มเติมสาธารณะสาธารณะ (ส่วนประกอบส่วนประกอบ) {this.Component = ส่วนประกอบ; } @Override // เรียกวิธีดั้งเดิมที่จะแก้ไขการดำเนินการโมฆะสาธารณะ () {component.operation (); - Concretedecorator: วัตถุตกแต่งเฉพาะเล่นฟังก์ชั่นของการเพิ่มความรับผิดชอบให้กับส่วนประกอบ
คลาส ConcretEdecoratora ขยายงานตกแต่ง {สตริงส่วนตัวเพิ่ม state = "คุณสมบัติใหม่ 1"; concretedecoratora (ส่วนประกอบส่วนประกอบ) {super (ส่วนประกอบ); } การดำเนินการโมฆะสาธารณะ () {super.operation (); System.out.println ("เพิ่มแอตทริบิวต์:" + AddsState); }} คลาส concretedecoratorb ขยายมัณฑนากร {concretedecoratorb (ส่วนประกอบส่วนประกอบ) {super (ส่วนประกอบ); } การดำเนินการโมฆะสาธารณะ () {super.operation (); เพิ่ม BEHAVIOR (); } โมฆะสาธารณะเพิ่ม beHavior () {system.out.println ("เพิ่มพฤติกรรม"); - รหัสทดสอบ
Public Class DecoratorPattern {โมฆะคงที่สาธารณะหลัก (String [] args) {Component Component = New Concretecomponent (); component.operation (); System.out.println ("=========================================================================================================================== - - - - - - System.out.println ("=================================================================================================== - การรันผลลัพธ์
อักษรย่อ พฤติกรรม ================================================================================ - - -
2. สถานการณ์แอปพลิเคชัน
1. จำเป็นต้องเพิ่มความรับผิดชอบให้กับวัตถุหนึ่งวัตถุแบบไดนามิกและโปร่งใสนั่นคือมันไม่ส่งผลกระทบต่อวัตถุอื่น ๆ
2. คุณต้องเพิ่มฟังก์ชั่นลงในวัตถุแบบไดนามิกและฟังก์ชั่นเหล่านี้สามารถยกเลิกได้แบบไดนามิก
3. มีความจำเป็นที่จะต้องเพิ่มฟังก์ชั่นจำนวนมากที่เกิดจากการจัดเรียงและการรวมกันของฟังก์ชั่นพื้นฐานบางอย่างเพื่อให้ความสัมพันธ์การสืบทอดกลายเป็นสิ่งที่ไม่สมจริง
4. เมื่อวิธีการสร้างคลาสย่อยไม่สามารถใช้สำหรับการขยายตัว สถานการณ์หนึ่งคืออาจมีส่วนขยายอิสระจำนวนมากซึ่งจะสร้างคลาสย่อยจำนวนมากเพื่อรองรับการรวมกันแต่ละชุดทำให้จำนวน subclasses ระเบิด อีกกรณีหนึ่งอาจเป็นเพราะคำจำกัดความของคลาสถูกซ่อนไว้หรือไม่สามารถใช้คำจำกัดความของคลาสเพื่อสร้างคลาสย่อย
3. ประเด็นสำคัญ
1. วัตถุตกแต่งและวัตถุจริงมีอินเทอร์เฟซเดียวกัน วิธีนี้วัตถุลูกค้าสามารถโต้ตอบกับวัตถุตกแต่งในลักษณะเดียวกับวัตถุจริง
2. วัตถุตกแต่งมีการอ้างอิงถึงวัตถุจริง
3. วัตถุตกแต่งยอมรับคำขอทั้งหมดจากลูกค้า มันส่งต่อคำขอเหล่านี้ไปยังวัตถุจริง
4. วัตถุตกแต่งสามารถเพิ่มฟังก์ชั่นเพิ่มเติมก่อนหรือหลังการส่งต่อคำขอเหล่านี้ สิ่งนี้ทำให้มั่นใจได้ว่าในรันไทม์สามารถเพิ่มฟังก์ชั่นเพิ่มเติมจากภายนอกได้โดยไม่ต้องแก้ไขโครงสร้างของวัตถุที่กำหนด ในการออกแบบเชิงวัตถุการขยายการทำงานไปยังคลาสที่กำหนดมักจะทำได้ผ่านการสืบทอด
ข้างต้นเป็นการแนะนำเนื้อหาที่เกี่ยวข้องเกี่ยวกับโหมดมัณฑนากร Java ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคน