อะแด็ปเตอร์แพตเทิร์น
จากวิกิพีเดีย สารานุกรมเสรี
อะแด็ปเตอร์แพตเทิร์น (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 โดย David Geary ((อังกฤษ))
- Design Patterns in Java: Adapter โดย Steven John Metsker ((อังกฤษ))