โหมดอะแดปเตอร์
การกำหนดรูปแบบอะแดปเตอร์ (ภาษาอังกฤษ: รูปแบบอะแดปเตอร์) บางครั้งเรียกว่ารูปแบบบรรจุภัณฑ์หรือบรรจุภัณฑ์ ถ่ายโอนอินเทอร์เฟซของคลาสไปยังสิ่งที่ผู้ใช้คาดหวัง การปรับตัวทำให้คลาสที่ไม่สามารถทำงานร่วมกันได้เนื่องจากความไม่ลงรอยกันของอินเทอร์เฟซ
มีสองโหมดอะแดปเตอร์:
1. โหมดอะแดปเตอร์วัตถุ - อะแดปเตอร์วัตถุตรงกับอินเทอร์เฟซความคาดหวังของผู้ใช้ผ่านการเชื่อมโยงและยังช่วยลดการมีเพศสัมพันธ์ที่ไม่ดีระหว่างรหัส ขอแนะนำให้ใช้ "การปรับวัตถุ" ในงานของคุณ
2. โหมดอะแดปเตอร์คลาส - ในโหมดอะแดปเตอร์นี้อะแดปเตอร์สืบทอดคลาสที่ใช้งาน (โดยปกติจะเป็นหลายมรดก) ไม่มีการสืบทอดหลายครั้งใน Java ดังนั้นฉันจะไม่แนะนำที่นี่
ทำให้สำเร็จ
1. เป้าหมาย - กำหนดวิธีการที่ลูกค้าต้องการใช้
2. อะแดปเตอร์ - สืบทอดหรือใช้เป้าหมายและปรับให้เข้ากับวิธีการปรับตัวให้เข้ากับเป้าหมาย
3. Adaptee - กำหนดวิธีที่มีอยู่
4. ไคลเอนต์ - วิธีการโทรในเป้าหมาย
คลาสสาธารณะ Adaptee {Public Void เฉพาะเจาะจง () {System.out.println ("สวัสดีฉันมาจาก Adaptee!"); }} เป้าหมายอินเตอร์เฟสสาธารณะ {คำขอโมฆะสาธารณะ (); } อะแดปเตอร์คลาสสาธารณะใช้เป้าหมาย {Adaptee Adaptee; อะแดปเตอร์สาธารณะ () {Adaptee = new Adaptee (); } คำขอโมฆะสาธารณะ () {Adaptee.SpecificRequest (); }} ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {เป้าหมายเป้าหมาย = อะแดปเตอร์ใหม่ (); Target.request (); -ในการใช้รูปแบบอะแดปเตอร์คลาสเราจำเป็นต้องใช้อะแดปเตอร์เพื่อสืบทอด Adaptee
สถานการณ์ที่เกี่ยวข้อง
1. หากคุณต้องการใช้คลาสเก่าและอินเทอร์เฟซไม่ตรงกับความต้องการของคุณคุณสามารถใช้คลาสอะแดปเตอร์เป็นคลาสการไกล่เกลี่ย
2. คุณต้องการสร้างคลาสอเนกประสงค์ทั่วไปที่สามารถเรียกอินเทอร์เฟซของคลาสที่ไม่เกี่ยวข้องเพื่อให้คุณใช้
โหมดบริดจ์
แรงจูงใจบางครั้งนามธรรมควรมีการใช้งานที่แตกต่างกัน ตัวอย่างเช่นมีสองวิธีในการบันทึกข้อมูลหนึ่งคือวิธีไฟล์และอีกวิธีหนึ่งคือวิธีฐานข้อมูล การปฏิบัติตามปกติคือการสืบทอดคลาสที่บันทึกข้อมูลแล้วใช้วิธีที่แตกต่างกันในการบันทึกข้อมูล ปัญหาเกี่ยวกับเรื่องนี้คือมันยากที่จะแก้ไขและขยายวิธีการบันทึกและวิธีการบันทึกไม่สามารถเปลี่ยนได้เมื่อรันไทม์
การกำหนดรูปแบบบริดจ์เป็นหนึ่งในรูปแบบที่ซับซ้อนที่สุดในรูปแบบการออกแบบซอฟต์แวร์ซึ่งแยกส่วนที่เป็นนามธรรมของสิ่งต่าง ๆ ออกจากชิ้นส่วนการใช้งานเพื่อให้พวกเขาสามารถเปลี่ยนแปลงได้อย่างอิสระ
ตัวอย่างเช่น "วงกลม" และ "สามเหลี่ยม" จัดอยู่ภายใต้นามธรรม "รูปร่าง" ในขณะที่ "วงกลมวาดวงกลม" และ "วาดสามเหลี่ยม" จัดอยู่ภายใต้หมวดหมู่ "การวาด" ที่ตระหนักถึงพฤติกรรมและจากนั้น "วาด" ถูกเรียกโดย "รูปร่าง"
1. บทคัดย่อ - กำหนดวิธีนามธรรม
2. AbstractImpl - ใช้อินเทอร์เฟซการใช้งานเพื่อใช้วิธีการนามธรรม
3. Adpitaulation - กำหนดอินเทอร์เฟซสำหรับพฤติกรรมการใช้งานเฉพาะ
4. คอนกรีต Implementor1, Concreteimplementor2 - ใช้อินเทอร์เฟซ applementor
/ ** "appleenor"*/ อินเทอร์เฟซ drawingapi {โมฆะสาธารณะ drawcircle (double x, double y, double radius); }/** "ConcreteImplementor" 1/2*/คลาส DrawingApi1 ใช้การวาดรูป {โมฆะสาธารณะ drawclecle (double x, double y, สองรัศมี) {system.out.printf ("api1.circle ที่ %f: %f radius %f/n", x, y, y, y, y, y, y, y, y, y }}/** "ConcreteImplementor" 2/2*/คลาส DrawingApi2 ใช้การวาดรูป {โมฆะสาธารณะ drawcircle (double x, double y, รัศมีคู่) {system.out.printf ("api2.circle ที่ %f: %f radius %f/n", x, y, y, y, y, y, y, y, y, y, y }} / ** "abstraction"* / รูปร่างอินเตอร์เฟส {public void draw (); // โมฆะสาธารณะระดับต่ำ resizebypercentage (สอง PCT); // ระดับสูง}/ ** "abstraction refined"*/ class circleshape ใช้รูปร่าง {private double x, y, radius; Private Drawingapi Drawingapi; วงกลมสาธารณะ (double x, double y, radius คู่, drawingapi drawingapi) {this.x = x; this.y = y; this.radius = รัศมี; this.drawingapi = drawingapi; } // การใช้งานระดับต่ำ IE การใช้งานโมฆะสาธารณะเฉพาะการวาด () {drawingapi.drawcircle (x, y, รัศมี); } // ระดับสูงเช่นบทคัดย่อเฉพาะโมฆะสาธารณะ ResizeByperperce (สอง pCT) {RADIUS *= PCT; }} / ** "ไคลเอนต์"* / คลาส BridgePattern {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {รูปร่าง [] รูปร่าง = รูปร่างใหม่ [2]; รูปร่าง [0] = วงกลมใหม่ (1, 2, 3, รูปวาดใหม่ ()); รูปร่าง [1] = วงกลมใหม่ (5, 7, 11, รูปวาดใหม่ ()); สำหรับ (รูปร่างรูปร่าง: รูปร่าง) {shape.resizebypercentage (2.5); shape.draw (); - ตัวอย่าง
1. บันทึกข้อมูลที่กล่าวถึงในแรงจูงใจ
2. กรอบการวาดของกราฟิก คล้ายกับการใช้งานในรหัสข้างต้น
สถานการณ์ที่เกี่ยวข้อง
1. คุณไม่ต้องการให้สิ่งที่เป็นนามธรรมและการใช้งานมีความสัมพันธ์ที่แน่นอน แต่คุณหวังว่าการดำเนินการสามารถแก้ไขได้ที่รันไทม์
2. ทั้งชิ้นส่วนนามธรรมและการใช้งานสามารถขยายได้อย่างอิสระโดยไม่ส่งผลกระทบต่อกันและกัน