รูปแบบของมัณฑนากรสามารถเพิ่มความรับผิดชอบพิเศษให้กับวัตถุได้ ในแง่ของการเพิ่มฟังก์ชั่นโหมดตกแต่งมีความยืดหยุ่นมากกว่าการสร้างคลาสย่อย
สภาพแวดล้อมที่เกี่ยวข้องสำหรับโหมดนี้คือ:
(1) เพิ่มความรับผิดชอบให้กับวัตถุเดียวในลักษณะไดนามิกและโปร่งใสโดยไม่ส่งผลกระทบต่อวัตถุอื่น ๆ
(2) จัดการความรับผิดชอบเหล่านั้นที่สามารถเพิกถอนได้
(3) เมื่อวิธีการสร้างคลาสย่อยไม่สามารถใช้สำหรับการขยายตัว สถานการณ์หนึ่งคืออาจมีส่วนขยายอิสระจำนวนมากซึ่งจะสร้างคลาสย่อยจำนวนมากเพื่อรองรับการรวมกันแต่ละชุดทำให้จำนวน subclasses ระเบิด อีกกรณีหนึ่งอาจเป็นเพราะคำจำกัดความของคลาสถูกซ่อนไว้หรือไม่สามารถใช้คำจำกัดความของคลาสเพื่อสร้างคลาสย่อย
ขั้นตอนสำคัญในการใช้โหมดนี้:
(1) ส่วนประกอบ (คลาสพื้นฐานของวัตถุที่ตกแต่ง): กำหนดส่วนต่อประสานของวัตถุซึ่งสามารถเพิ่มความรับผิดชอบในวัตถุเหล่านี้แบบไดนามิก
(2) คอนกรีตคอมโพสิต (วัตถุตกแต่งเฉพาะ): กำหนดวัตถุเฉพาะและมัณฑนากรสามารถเพิ่มความรับผิดชอบเพิ่มเติมให้กับมัน;
(3) มัณฑนากร (ชั้นเรียนบทคัดย่อมัณฑนากร): ยังคงอ้างอิงถึงอินสแตนซ์ส่วนประกอบและกำหนดอินเทอร์เฟซที่สอดคล้องกับส่วนประกอบ ( นั่นคือเพื่อสืบทอดหรือใช้คลาสฐานของวัตถุที่ตกแต่ง );
(4) Concretedecorator: วัตถุตกแต่งเฉพาะเพิ่มความรับผิดชอบเฉพาะให้กับวัตถุตกแต่งเฉพาะที่จัดขึ้นภายใน;
นี่อาจเป็นเรื่องยากสำหรับทุกคนที่จะเข้าใจดังนั้นเรายังคงเงียบ:
หลังจากฤดูหนาวอากาศจะเย็นลงและเย็นลง หลังจากออกจากงานในฐานะนักชิมที่มีประสบการณ์มันจะเป็นการดีที่จะได้นัดกับเพื่อนสองหรือสามคนที่จะมีงานเลี้ยงหม้อน้ำร้อน ฉันต้องพูดถึงหม้อฮอต Dalong ที่ฉันกินในเฉิงตูด้วยก้นหม้อและเครื่องเคียงทุกชนิด แต่สิ่งที่ฉันชอบคือก้นหม้อดั้งเดิมของหม้อร้อน Dalong, เนื้อเผ็ด, dadao tripe, tianwei ไส้กรอก
เมื่อพูดถึงเรื่องนี้คุณควรรู้สึกเล็กน้อยเกี่ยวกับเรื่องนี้ ก้นหม้อที่กล่าวถึงข้างต้นเป็น ฐานของวัตถุตกแต่ง ส่วนผสมเป็น วัตถุนามธรรมตกแต่ง ก้นหม้อที่เฉพาะเจาะจงของหม้อฮอตฮอตด้านล่างของหม้อต้นฉบับคือวัตถุตกแต่งที่เฉพาะเจาะจง เครื่องเคียงต่าง ๆ ที่ใช้ในการตกแต่งด้านล่างของหม้อเป็น วัตถุตกแต่งที่เฉพาะเจาะจง เมื่อพูดถึงเรื่องนี้ทุกคนควรตระหนักถึงมันอย่างกะทันหัน มาเริ่มการใช้งานรหัสเฉพาะ:
ขั้นตอนที่ 1: กำหนดคลาสพื้นฐานของวัตถุที่ตกแต่ง (สามารถเป็นคลาสนามธรรมหรืออินเทอร์เฟซ)
อินเทอร์เฟซสาธารณะ guodi {public float cost (); // แน่นอนว่าหม้อด้านล่างจะต้องเป็นราคาสตริงสาธารณะ (); // ชื่อจะต้องพร้อมใช้งาน} ขั้นตอนที่ 2: กำหนดวัตถุตกแต่งที่เฉพาะเจาะจง (นั่นคือก้นหม้อต่าง ๆ สองตัวถูกกำหนดไว้ที่นี่)
ชั้นเรียนสาธารณะ Yuanyang ใช้ guodi {@Override public public cost cost () {return 48.0f; } @Override ชื่อสตริงสาธารณะ () {return "double pot base"; }} คลาสสาธารณะ Dalongyan ใช้ guodi {@Override public public cost () {return 59.0f; } @Override ชื่อสตริงสาธารณะ () {return "Dalong Hot Pot Base Original Pot Base"; -ขั้นตอนที่ 3: กำหนดคลาสบทคัดย่อมัณฑนากร
บทคัดย่อระดับสาธารณะ Peicai ใช้ Guodi {ส่วนตัว Guodi Guodi; Public FoodDecorator (Guodi Guodi) {super (); this.guodi = guodi; } @Override public public cost () {return guodi.cost (); } @Override ชื่อสตริงสาธารณะ () {return guodi.name (); -ขั้นตอนที่ 4: กำหนดวัตถุมัณฑนากรที่เฉพาะเจาะจง
Malaniurou ชั้นเรียนสาธารณะขยาย Peicai {Public Malaniurou (Guodi Guodi) {Super (Guodi); } @Override Public Float Cost () {return super.cost ()+46f; } @Override ชื่อสตริงสาธารณะ () {return super.name ()+"+เนื้อเผ็ด"; }} คลาสสาธารณะ Maodu ขยาย peicai {สาธารณะ maodu (guodi guodi) {super (guodi); } @Override Public Public Cost () {return super.cost ()+30f; } @Override ชื่อสตริงสาธารณะ () {return super.name ()+"+Big Knife Tripe"; -คลาสทดสอบ:
การทดสอบระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {guodi guodi = new Dalongyan (); // สั่งหม้อฮอต Dalong ต้นฉบับ Malaniurou y = ใหม่ malaniurou (guodi); // รับเนื้อเผ็ด คำสั่งซื้อ "+x.name ()+", กิน "+s.cost ()); -ผลลัพธ์ผลลัพธ์:
1. มีการสั่งซื้อหม้อฮอตหม้อดาลลองทั้งหมด + เนื้อเผ็ด + dadao ผ้าขี้ริ้วได้รับคำสั่งและมีการบริโภคทั้งหมด 135
ข้างต้นเป็นรูปแบบของมัณฑนากร Java ที่แนะนำให้คุณทราบโดยบรรณาธิการ (ทำความเข้าใจหลักการรหัสจากมุมมองชีวิตจริง) ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!