บทความนี้อธิบายถึงกรณีของขนมปังนึ่งย้อมสีที่ใช้โดย Java ตามรูปแบบของมัณฑนากร แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
1. คำจำกัดความรูปแบบ
รูปแบบของมัณฑนากรขยายฟังก์ชั่นวัตถุแบบไดนามิกโดยไม่ต้องเปลี่ยนไฟล์ต้นฉบับและใช้การสืบทอด มันห่อวัตถุจริงโดยการสร้างวัตถุห่อนั่นคือการตกแต่ง
วัตถุตกแต่งและวัตถุจริงมีอินเทอร์เฟซเดียวกันเพื่อให้วัตถุลูกค้าสามารถโต้ตอบกับวัตถุตกแต่งในลักษณะเดียวกับวัตถุจริง
วัตถุตกแต่งมีการอ้างอิงถึงวัตถุจริง
2. ตัวอย่างของแบบจำลอง
1. การวิเคราะห์รูปแบบ
เราใช้กรณีของผู้ขายสีดำเพื่อทำขนมปังย้อมเพื่อแสดงรุ่นนี้
2. โหมดมัณฑนากรชเทณ์คลาสสแตติกคลาส
3. ตัวอย่างรหัส
3.1 สร้างอินเตอร์เฟสขนมปังนึ่ง - iBread
แพ็คเกจ com.demo.abs;/** * อินเทอร์เฟซการประมวลผล BUN นึ่ง * * @author * */อินเตอร์เฟสสาธารณะ iBread {// เตรียมวัสดุ Public Prepair (); // Harmony Public Void Kneeflour (); // ขนมปังนึ่งโมฆะสาธารณะนึ่ง (); / *** การประมวลผลขนมปังนึ่ง*/ กระบวนการโมฆะสาธารณะ ();}3.2 การใช้งาน BUN ปกติ - NormalBread
แพ็คเกจ com.demo.abs;/** * การใช้งานของขนมปังนึ่งปกติ * * @author * */คลาสสาธารณะ NormalBread ใช้ iBread {// เตรียมส่วนผสม prepair สาธารณะ () {system.out.println ("เตรียมแป้งน้ำและผงอบ ... "); } // hemian public void kneeflour () {system.out.println ("hmian ... "); } // ขนมปังนึ่งโมฆะสาธารณะนึ่ง () {system.out.println ("ขนมปังนึ่ง ... ขนมปังนึ่งกลิ่นหอมออกมาจากเตาอบ!"); } / *** การประมวลผลขนมปังนึ่ง* / กระบวนการโมฆะสาธารณะ () {// เตรียมส่วนผสม prepair (); // kneadflour (); // นึ่งนึ่ง (); -3.3 สร้างมัณฑนากรนามธรรม - AbstractBread
แพ็คเกจ com.demo.decorator; นำเข้า com.demo.abs.ibread;/** * บทคัดย่อมัณฑนากร * * @author * */บทคัดย่อระดับนามธรรม Abstractbread ใช้ iBread {// ร้านค้า Ibread Bread Ibread Private Final Bread; Public AbstractBread (iBread Bread) {this.bread = ขนมปัง; } // เตรียมโมฆะสาธารณะวัสดุเตรียม () {this.bread.prepair (); } // เป็นโมฆะสาธารณะเบา ๆ เข่า () {this.bread.kneadflour (); } // ขนมปังนึ่งโมฆะสาธารณะนึ่ง () {this.bread.steamed (); } // การประมวลผล Buns Public Process () {prepair (); หัวเข่า (); นึ่ง (); -3.4 สร้างมัณฑนากร Dye - Corndecorator
แพ็คเกจ com.demo.decorator; นำเข้า com.demo.abs.ibread;/** * ขนมปังข้าวโพด dyeed * * @author * */corndecorator ระดับสาธารณะขยาย Abstractbread {// วิธีการสร้าง corndecorator สาธารณะ (ขนมปัง ibread) {super (ขนมปัง); } // ผู้ขายสีดำได้เริ่มย้อมสีโมฆะสาธารณะ () {system.out.println ("เพิ่มสีเหลืองมะนาว ... "); } // overload วิธีการแป้งของคลาสแม่ @Override โมฆะสาธารณะเข่า () {// this.paint () เริ่มต้นขึ้นหลังจากเพิ่มสีย้อมลงในแป้ง; // วาง super.kneadflour (); -3.5 สร้างมัณฑนากร Scalypse - SweetDecorator
แพ็คเกจ com.demo.decorator; นำเข้า com.demo.abs.ibread;/** * cyperus bondsed bun * * @author * */คลาสสาธารณะ sweetdecorator ขยายบทคัดย่อ {// วิธีการสร้าง public sweetdecorator (ibread bread) {super (ขนมปัง); } // ผู้ขายสีดำเริ่มเพิ่ม Cyperus Public Void Paint () {System.out.println ("เพิ่ม Cyperus ... "); } // overload วิธีการแป้งของคลาสแม่ @Override โมฆะสาธารณะเข่า () {// เริ่มแป้งสิ่งนี้ paint () หลังจากเพิ่ม cyperus ลงในแป้ง; // hemma super.kneadflour (); -3.6 การผลิตขนมปังนึ่งข้าวโพดหวาน - ลูกค้า
แพ็คเกจ com.demo; นำเข้า com.demo.abs.ibread; นำเข้า com.demo.abs.normalbread นำเข้า com.demo.decorator.corndecorator; นำเข้า com.demo.decorator.sweetdecorator;/** แอปพลิเคชันไคลเอนต์ * * * * * * * * * * * * * * * * // การผลิต Buns System.out.out.println ("/n ====== เริ่มต้นขนมปังนึ่งตกแต่ง !!!"); // สร้างอินสแตนซ์ของขนมปังนึ่งปกติปกติ // นี่คืออินสแตนซ์ของวัตถุที่เราต้องห่อ (ตกแต่ง) iBread normalBread = new NormalBread (); // เริ่มตกแต่งขนมปังนึ่งปกติ! - - // ใช้ saccharin เพื่อตกแต่งขนมปังนึ่ง NormalBread = New SweetDecorator (NormalBread); // ใช้สีเหลืองมะนาวเพื่อตกแต่งขนมปังนึ่ง NormalBread = ใหม่ corndecorator (NormalBread); // การผลิตข้อมูลขนมปังนึ่ง NormalBread.process (); System.out.println ("===== ตกแต่งปลายขนมปังนึ่ง !!!"); -4. ผลการดำเนินงาน
==== เริ่มตกแต่งขนมปังนึ่ง! - -
เตรียมแป้งน้ำและผงฟู ...
เพิ่มสีเหลืองมะนาว ...
เพิ่ม cyanin ...
จาระบี ...
ขนมปังนึ่ง ... ขนมปังนึ่งกลิ่นออกมาจากเตาอบ!
==== ขนมปังนึ่งตกแต่งสิ้นสุดลง! - -
3. หลักการออกแบบของรุ่นนี้
1 ส่วนเปลี่ยนปิด
หลักการ 2 "เปิดและปิด"
3 การเขียนโปรแกรมเชิงนามธรรม
4. ชอบชุดค่าผสมมากกว่าการสืบทอด
4. ใช้โอกาส
1. เมื่อเราต้องการเพิ่มคุณสมบัติหรือความรับผิดชอบใหม่ให้กับวัตถุที่มีอยู่แบบไดนามิกเราสามารถพิจารณาใช้รูปแบบของมัณฑนากร
2. เมื่อความรับผิดชอบของวัตถุมักจะเปลี่ยนแปลงหรือความรับผิดชอบจะต้องเพิ่มขึ้นแบบไดนามิกหลีกเลี่ยงการเพิ่มการขยายตัวย่อยที่สืบทอดมาเพื่อปรับให้เข้ากับการเปลี่ยนแปลงดังกล่าวเนื่องจากวิธีนี้จะทำให้คลาสย่อยขยายเร็วเกินไปและยากต่อการควบคุม ในเวลานี้โหมดมัณฑนากรสามารถใช้งานได้
5. โหมดมัณฑนากรช์ไดอะแกรมคลาสคงที่
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน