มัณฑนากรมักจะถูกแปลว่า "การตกแต่ง" จำเป็นต้องใช้เอนทิตีทั้งสองนี้ในโหมดมัณฑนากร
คำจำกัดความของมัณฑนากร: เพิ่มความรับผิดชอบพิเศษให้กับวัตถุเช่นการทาสีผนัง การใช้โหมดมัณฑนากรนั้นมีความยืดหยุ่นมากกว่าการใช้การสร้างคลาสย่อยเพื่อให้ได้การขยายการทำงาน
ทำไมต้องใช้มัณฑนากร
โดยปกติแล้วเราสามารถใช้การสืบทอดเพื่อให้ได้การขยายฟังก์ชั่น ต้องคาดการณ์ฟังก์ชั่นการขยายตัวเหล่านี้
เหตุผลในการใช้งานตกแต่งคือฟังก์ชั่นเหล่านี้จำเป็นต้องตัดสินใจแบบไดนามิกโดยผู้ใช้เพื่อเข้าร่วม มัณฑนากรให้วิธีการ "Plug and Play" เพื่อตัดสินใจว่าจะเพิ่มคุณสมบัติใดในระหว่างการรันไทม์
วิธีใช้โหมดตกแต่ง
นำตัวอย่างของการขับขี่ในอะแดปเตอร์ การขับขี่กองเช่นการขุด
มาสร้างอินเทอร์เฟซก่อน:
การคัดลอกรหัสมีดังนี้:
งานอินเตอร์เฟสสาธารณะ {
ช่องว่างสาธารณะแทรก ();
-
งานอินเตอร์เฟสมีการใช้งานเฉพาะ: แทรกกองสี่เหลี่ยมหรือกองวงกลม ลองใช้การแทรกกองสี่เหลี่ยมเป็นตัวอย่าง:
การคัดลอกรหัสมีดังนี้:
Squarepeg คลาสสาธารณะใช้งาน {
ช่องว่างสาธารณะแทรก () {
System.out.println ("การแทรกกองสี่เหลี่ยม");
-
-
ตอนนี้มีแอปพลิเคชัน: ก่อนที่จะมีการขับเคลื่อนเสาเข็มขุดหลุมและหลังจากที่มีการขับเคลื่อนเสาเข็มบอร์ดไม้จะถูกตอกย้ำบนกอง อาจจำเป็นต้องตอกตะปูหลังกองหลังจากขับเคลื่อน (เพียงคำอุปมา)
จากนั้นเราใช้โหมดมัณฑนากรที่ Squarepeg เป็นสแควร์พม่าคือการตกแต่ง (ทาสีด้วยสี) เราจำเป็นต้องวาด "สี" บางส่วนบนตกแต่งและสีเหล่านี้เป็นฟังก์ชั่นพิเศษเหล่านั้น
การคัดลอกรหัสมีดังนี้:
มัณฑนากรชั้นสาธารณะใช้งาน {
งานส่วนตัว
// ฟังก์ชั่นเพิ่มเติมถูกบรรจุในรายการนี้
arraylist ส่วนตัวอื่น ๆ = new ArrayList ();
// ใช้วิธีการใหม่ที่รวมกันในคอนสตรัคเตอร์เพื่อแนะนำวัตถุงาน;
มัณฑนากรสาธารณะ (ทำงาน) {
this.work = work;
อื่น ๆ ADD ("ขุดหลุม");
อื่น ๆ ADD ("กระดานเล็บ");
-
ช่องว่างสาธารณะแทรก () {
newMethod ();
-
// ในวิธีการใหม่เราเพิ่มวิธีการอื่นก่อนที่จะแทรกคำสั่งที่นี่จะระบุโดยผู้ใช้อย่างยืดหยุ่น
โมฆะสาธารณะ newMethod () {
othermethod ();
work.insert ();
-
โมฆะสาธารณะอื่น ๆ method () {
listiterator listiterator = อื่น ๆ listiterator ();
ในขณะที่ (listiterator.hasnext ()) {
System.out.println (((String) (listiterator.next ()))) + "กำลังดำเนินการ");
-
-
-
ในตัวอย่างข้างต้นเราจัดอันดับทั้งหลุมขุดและบอร์ดที่ตอกย้ำที่ด้านหน้าของเม็ดมีด
โอเคโหมดมัณฑนากรออกมาดูวิธีเรียกมันว่า:
การคัดลอกรหัสมีดังนี้:
ทำงาน squarepeg = ใหม่ squarepeg ();
งานตกแต่ง = มัณฑนากรใหม่ (Squarepeg);
Decorator.Insert ();
โหมดมัณฑนากรเสร็จสมบูรณ์ที่นี่
หากคุณระมัดระวังคุณจะพบว่าการโทรด้านบนคล้ายกับการโทรที่เราอ่านเมื่อเราอ่านไฟล์:
การคัดลอกรหัสมีดังนี้:
filereader fr = filereader ใหม่ (ชื่อไฟล์);
bufferedReader br = new bufferedReader (FR);
ในความเป็นจริง I/O API ของ Java ถูกนำมาใช้โดยใช้มัณฑนากร
การใช้งานมัณฑนากรใน Jive
ในระบบฟอรัมอักขระพิเศษบางตัวไม่สามารถปรากฏในฟอรัมเช่น "ลงด้วย XXX" เราต้องกรองแบบอักษร "ปฏิกิริยา" เหล่านี้ อย่าปล่อยให้พวกเขาปรากฏหรือแสดงด้วยความสว่างสูง
ในบทความโดยเฉพาะที่พูดถึง Jive ในคอลัมน์ IBM Java มันถูกกล่าวถึงว่า ForummessageFilter.java ใน Jive ใช้โหมดมัณฑนากร จากนั้นคุณสามารถจัดระเบียบ ForummessageFilter ใหม่เป็นโหมดมัณฑนากร
ดังนั้นเมื่อเราตัดสินใจว่ามันเป็นโหมดมัณฑนากรจริง ๆ และจะใช้โหมดมัณฑนากรจริง ๆ เราต้องเข้าใจคำจำกัดความของโหมดมัณฑนากรและบทบาทที่เกี่ยวข้อง (ตกแต่งและมัณฑนากร)