มัณฑนากร
มัณฑนากร (มัณฑนากรรูปแบบ) ช่วยให้คุณสามารถเพิ่มคุณสมบัติใหม่ให้กับวัตถุที่มีอยู่โดยไม่มีการเปลี่ยนแปลงโครงสร้างของมัน ประเภทของรูปแบบการออกแบบเป็นรูปแบบโครงสร้างก็สามารถใช้ได้เป็นชั้นห่อหุ้ม
รูปแบบนี้จะสร้างการตกแต่งที่ใช้ในการห่อชั้นและชั้นเดิมวิธีการในการรักษาความสมบูรณ์ของลายเซ็นตามสถานที่ตั้งของการให้ฟังก์ชันการทำงานเพิ่มเติม
เราใช้ตัวอย่างต่อไปนี้แสดงให้เห็นถึงรูปแบบมัณฑนากร ในหมู่พวกเขาเราจะรูปแบบการตกแต่งในโทนสีที่แตกต่างกันโดยไม่มีการเปลี่ยนแปลงรูปร่างของชั้น
การแนะนำ
เจตนา: แบบไดนามิกไปยังวัตถุที่จะเพิ่มความรับผิดชอบบางอย่างเพิ่มเติมทำงานที่เพิ่มขึ้น, มัณฑนากรรูปแบบเมื่อเทียบ subclassing ความยืดหยุ่นมากขึ้น
เป็นหลักในการแก้ปัญหา: โดยทั่วไปเรามักจะใช้ในการขยายมรดกชั้นเพื่อให้บรรลุเนื่องจากการแนะนำของคุณสมบัติระดับมรดกแบบคงที่และขยายการทำงานกับการเพิ่มขึ้นของ subclass จะบวม
เมื่อใช้: คุณไม่ต้องการที่เพิ่มขึ้นในกรณีของหลายหมวดหมู่ย่อยการขยายชั้นเรียน
วิธีการแก้ปัญหา: การแบ่งหน้าที่ความรับผิดชอบการทำงานที่เฉพาะเจาะจงในขณะที่รูปแบบการสืบทอดมัณฑนากร
คีย์รหัส: 1 การกระทำระดับตัวแทนเป็นบทบาทที่เป็นนามธรรมไม่ควรการดำเนินงานเฉพาะ2 อ้างอิงชั้นเรียนและตัวแทนมรดกชั้นปรับเปลี่ยนการเรียนการขยายแทนที่วิธีเฉพาะระดับผู้ปกครอง
ตัวอย่างการใช้งาน: 1, Monkey King 72 การเปลี่ยนแปลงเมื่อเขากลายเป็น "พระวิหาร" เขาก็เป็นลิง แต่เขามีฟังก์ชั่นวัด2 โดยไม่คำนึงถึงกรอบรูปมีสามารถแขวนบนผนัง แต่มักจะมีกรอบรูปและกรอบเป็นจริงแขวนอยู่บนผนัง ก่อนที่จะแขวนบนผนัง, ภาพวาดสามารถถูกปกคลุมด้วยกระจกติดตั้งไปยังบ้านกรอบนั้นแล้วภาพวาด, กระจกและกรอบรูปของวัตถุ
ข้อดี: การตกแต่งและการตกแต่งที่สามารถพัฒนาได้อย่างอิสระไม่ได้คู่กับแต่ละอื่น ๆ ตกแต่งลวดลายคือโหมดการเลือกของมรดก, รูปแบบการตกแต่งแบบไดนามิกสามารถขยายคลาสที่ใช้ฟังก์ชั่นที่
ข้อเสีย: การตกแต่งที่ซับซ้อนมากขึ้นหลาย
สถานการณ์การใช้งาน: 1, ฟังก์ชั่นการขยายชั้นเรียน2 ฟังก์ชันการทำงานที่เพิ่มขึ้นแบบไดนามิกแบบไดนามิกเพิกถอน
หมายเหตุ: คุณสามารถใช้แทนมรดก
การสำนึก
เราจะสร้างอินเตอร์เฟซที่รูปร่างและการดำเนินงานของอินเตอร์เฟซที่รูปร่างเรียนนิติบุคคลจากนั้นเราจะสร้างสำนึกของอินเตอร์เฟซShapeDecoratorรูปร่างนามธรรมตกแต่งและวัตถุรูปร่างเป็นตัวแปรเช่นของมัน
RedShapeDecoratorคือเพื่อให้บรรลุการเรียนกิจการShapeDecorator
DecoratorPatternDemo เรียนสาธิตของเราโดยใช้RedShapeDecoratorการตกแต่งวัตถุรูปร่าง
ขั้นตอนที่ 1
สร้างอินเตอร์เฟซ
Shape.java
รูปร่างอินเตอร์เฟซที่สาธารณะ { วาดเป็นโมฆะ (); }
ขั้นตอนที่ 2
สร้างคลาสนิติบุคคลที่ใช้อินเตอร์เฟซ
Rectangle.java
เรียนสาธารณะสี่เหลี่ยมผืนผ้ารูปร่างดำเนิน { @Override วาดโมฆะสาธารณะ () { System.out.println ( "รูปร่าง: สี่เหลี่ยมผืนผ้า"); } }
Circle.java
วงกลมเรียนสาธารณะดำเนินรูปร่าง { @Override วาดโมฆะสาธารณะ () { System.out.println ( "รูปร่าง: วงกลม"); } }
ขั้นตอนที่ 3
สร้างบรรลุนามธรรมอินเตอร์เฟซที่รูปร่างตกแต่ง
ShapeDecorator.java
ประชาชน ShapeDecorator ระดับนามธรรมดำเนินรูปร่าง { decoratedShape รูปร่างคุ้มครอง ShapeDecorator สาธารณะ (Shape decoratedShape) { this.decoratedShape = decoratedShape; } วาดโมฆะสาธารณะ () { decoratedShape.draw (); } }
ขั้นตอนที่ 4
สร้างนิติบุคคลขยายระดับShapeDecoratorตกแต่ง
RedShapeDecorator.java
เรียนสาธารณะ RedShapeDecorator ขยาย ShapeDecorator { RedShapeDecorator สาธารณะ (Shape decoratedShape) { เปอร์ (decoratedShape); } @Override วาดโมฆะสาธารณะ () { decoratedShape.draw (); setRedBorder (decoratedShape); } ส่วนตัว setRedBorder โมฆะ (Shape decoratedShape) { System.out.println ( "สีของเส้นขอบ: สีแดง"); } }
ขั้นตอนที่ 5
RedShapeDecoratorใช้ในการตกแต่งวัตถุรูปร่าง
DecoratorPatternDemo.java
เรียนสาธารณะ DecoratorPatternDemo { ประชาชนเป็นโมฆะคง main (String args []) { รูปร่างวงกลม = แวดวงใหม่ (); รูปร่าง RedCircle = RedShapeDecorator ใหม่ (วงใหม่ ()); รูปร่าง redRectangle = RedShapeDecorator ใหม่ (สี่เหลี่ยมผืนผ้าใหม่ ()); System.out.println ( "วงกลมที่มีเส้นขอบปกติ"); circle.draw (); System.out.println ( "\ n วงกลมของเส้นขอบสีแดง"); redCircle.draw (); System.out.println ( "\ nRectangle ของเส้นขอบสีแดง"); redRectangle.draw (); } }
ขั้นตอนที่ 6
ตรวจสอบการส่งออก
วงกลมที่มีชายแดนตามปกติ รูปร่าง: วงกลม วงกลมขอบสีแดง รูปร่าง: วงกลม สีของเส้นขอบ: สีแดง สี่เหลี่ยมผืนผ้าขอบสีแดง รูปร่าง: สี่เหลี่ยมผืนผ้า สีของเส้นขอบ: สีแดง