แบบแผนอะแดปเตอร์
แบบแผนอะแดปเตอร์ (Adapter pattern) เป็นแบบแผนการออกแบบซอฟต์แวร์ ที่ใช้เชื่อมการทำงานระหว่างคลาสผู้เรียกและคลาสที่ถูกเรียกในกรณีที่คลาสที่ถูกเรียกมีเมธอดที่แตกต่างจากที่ผู้เรียกคาดหวัง ตัวอย่างที่เห็นได้ในชีวิตประจำวันเช่น หม้อแปลงไฟฟ้า หรือปลั๊กไฟที่มีขาต่างรูปทรงต่างกันจะต้องมีตัวแปลงเพื่อต่อเชื่อมเป็นต้น
การนำไปใช้งาน
แก้การสร้างคลาสสำหรับทำหน้าที่เป็นอะแด็ปเตอร์สามารถทำได้สองวิธีดังนี้
วิธีการแบบ inheritance ให้คลาสอะแด็ปเตอร์ซับคลาสจากคลาสที่จะถูกใช้งานจริงและให้อิมพลิเมนท์อินเตอร์เฟสตามที่คลาสผู้เรียกคาดหวัง ความสัมพันธ์ระหว่างผู้แปลงและผู้ถูกแปลงจะเป็นในแบบ is-a ดังภาพประกอบ
วิธีการแบบ delegation ให้คลาสอะแด็ปเตอร์อิมพลิเมนท์อินเตอร์เฟสตามที่คลาสผู้เรียกคาดหวังแต่ไม่ต้องซับคลาส คลาสอะแด็ปเตอร์เรียกเมธอดของคลาสที่จะถูกใช้งานผ่านทางอ็อบเจกต์ของคลาสที่ถูกใช้งานนั้น ความสัมพันธ์ระหว่างผู้แปลงและผู้ถูกแปลงจะเป็นในแบบ has-a ดังภาพ
ตัวอย่างโปรแกรม
แก้ภาษาจาวา
แก้ซอร์สโค้ดอะแด็ปเตอร์แบบ 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)
แหล่งข้อมูลอื่น
แก้- Adopt Adapter เก็บถาวร 2007-02-05 ที่ เวย์แบ็กแมชชีน โดย David Geary (อังกฤษ)
- Design Patterns in Java: Adapter[ลิงก์เสีย] โดย Steven John Metsker (อังกฤษ)
- อะแด็ปเตอร์แพตเทิร์น โดย อนุภาค มาตรมูล(ไทย)