ข้ามไปเนื้อหา

แบบแผนอะแดปเตอร์

จากวิกิพีเดีย สารานุกรมเสรี

แบบแผนอะแดปเตอร์ (Adapter pattern) เป็นแบบแผนการออกแบบซอฟต์แวร์ ที่ใช้เชื่อมการทำงานระหว่างคลาสผู้เรียกและคลาสที่ถูกเรียกในกรณีที่คลาสที่ถูกเรียกมีเมธอดที่แตกต่างจากที่ผู้เรียกคาดหวัง ตัวอย่างที่เห็นได้ในชีวิตประจำวันเช่น หม้อแปลงไฟฟ้า หรือปลั๊กไฟที่มีขาต่างรูปทรงต่างกันจะต้องมีตัวแปลงเพื่อต่อเชื่อมเป็นต้น

การนำไปใช้งาน

[แก้]

การสร้างคลาสสำหรับทำหน้าที่เป็นอะแด็ปเตอร์สามารถทำได้สองวิธีดังนี้

วิธีการแบบ inheritance ให้คลาสอะแด็ปเตอร์ซับคลาสจากคลาสที่จะถูกใช้งานจริงและให้อิมพลิเมนท์อินเตอร์เฟสตามที่คลาสผู้เรียกคาดหวัง ความสัมพันธ์ระหว่างผู้แปลงและผู้ถูกแปลงจะเป็นในแบบ is-a ดังภาพประกอบ

คลาสไดอะแกรมของแบบแผนอะแดปเตอร์ชนิด inheritance ในแบบ UML

วิธีการแบบ delegation ให้คลาสอะแด็ปเตอร์อิมพลิเมนท์อินเตอร์เฟสตามที่คลาสผู้เรียกคาดหวังแต่ไม่ต้องซับคลาส คลาสอะแด็ปเตอร์เรียกเมธอดของคลาสที่จะถูกใช้งานผ่านทางอ็อบเจกต์ของคลาสที่ถูกใช้งานนั้น ความสัมพันธ์ระหว่างผู้แปลงและผู้ถูกแปลงจะเป็นในแบบ has-a ดังภาพ

คลาสไดอะแกรมของแบบแผนอะแดปเตอร์ชนิด delegation ในแบบ UML

ตัวอย่างโปรแกรม

[แก้]

ภาษาจาวา

[แก้]

ซอร์สโค้ดอะแด็ปเตอร์แบบ inheritance

public class Adapter extends Adaptee implements ExpectedInterface {
    public void doWork() {
        actualDoWork();
    }
}

ซอร์สโค้ดอะแด็ปเตอร์แบบ delegation

public class Adapter implements ExpectedInterface {
    private Adaptee adaptee;

    public void doWork() {
        adaptee.actualDoWork();
    }
}

อินเตอร์เฟสที่โค้ดผู้เรียกคาดหวัง

public interface ExpectedInterface {
    public void doWork();
}

คลาสที่ถูกแปลง

public class Adaptee {
    public void actualDoWork() {
        // do work
    }
}

การเรียกใช้งาน

expectedInterface.doWork();

อ้างอิง

[แก้]
  • Design Patterns: Elements of Reusable Object-Oriented Software (ISBN 0-201-63361-2) โดย Erich Gamma, Richard Helm, Ralph Johnson และ John Vlissides (Gang of four: GoF)

แหล่งข้อมูลอื่น

[แก้]