อะแดปเตอร์ แพตเทิร์น
อะแดปเตอร์แพตเทิร์น (Adapter pattern) หรือ แร็ปเปอร์แพตเทิร์น (wrapper pattern) หรือเรียกสั้นๆว่า แร็ปเปอร์ (wrapper) เป็นดีไซน์แพตเทิร์นที่ใช้ในกรณีที่ รูปแบบการเชื่อมต่อของคลาสผู้เรียกและผู้ถูกเรียก ไม่สัมพันธ์กัน ดังนั้นจึงต้องใช้อะแดปเตอร์คลาสเข้ามาช่วยเป็นตัวกลาง ทำการเชื่อมต่อให้สามารถมาเรียกใช้งานกันได้
โครงสร้างอะแด๊ปเตอร์แพตเทิร์น
[แก้]จากรูป ผู้เรียก (target) ต้องการเรียกใช้งาน เม็ทธอด SpecificRequset() แต่ไม่สามารถเรียกโดยตรงได้ เนื่องจากรูปแบบการเชื่อมต่อไม่สัมพันธ์กัน ดังนั้นจึงสร้าง คลาส Adapter มาเพื่อเรียกใช้งานผ่าน เม็ทธอด Request() ให้ไปเรียก เม็ทธอด SpecificRequest() อีกต่อหนึ่ง
ตัวอย่างการใช้อะแด๊ปเตอร์แพตเทิร์น
[แก้]
ตัวอย่างที่โปรแกรมที่แสดง เป็นวิธีการนำอะแดปเตอร์แพตเทิร์นมาใช้งานจริง โดยสมมุติว่า มีแลปทอปอยู่เครื่องหนึ่ง ในการเปิดใช้งานต้องใช้ไฟฟ้าแรงดัน 110 โวลต์ แต่ไฟฟ้าที่บ้านแรงดัน 220 โวลต์ ดังนั้นจึงต้องใช้อะแดปเตอร์เข้ามาช่วย
class MainApp {
public static void main(String[] args) {
LapTop mylabtop = new LapTop(new Adapter(new Power(220)));
mylabtop.powerOn();
}
}
แสดงการสร้างอินสแตนท์ของ คลาส LabTop โดยจะทำการสร้างอินสแตนท์ของคลาส Power กำหนดแรงดันให้เป็น 220 โวลต์ ขึ้นมาก่อน และนำอินสแตนท์ที่ได้นั้นไปสร้าง อินสแตนท์ของอะแดปเตอร์เพื่อทำการแปลงแรงดันไฟฟ้าเป็น 110 โวลต์ จากนั้นนำอินสแตนท์ของคลาสอะแดปเตอร์ที่แปลงแล้ว ไปสร้างอินสแตนท์ของ คลาส Laptop อีกที สุดท้ายสั่งเปิดเครื่อง หากใช้ขนาดแรงดันไฟฟ้าถูก จะแสดงคำว่า Power On ขึ้นมา
class LapTop {
private int laptopvoltage;
private Target target;
LapTop(Target t) {
target = t;
laptopvoltage = target.getVoltage();
}
public void powerOn() {
if(laptopvoltage == 110)
System.out.println("Power On");
else
System.out.println("Over Voltage");
}
}
แสดง คลาส LapTop ซึ่งจะไปเรียก เม็ทธอด getValtage() ผ่านตัวแปร target
abstract class Target {
abstract public int getVoltage();
}
class Adapter extends Target {
private Power adaptee;
public Adapter(final Power a) {
adaptee = a;
}
public int getVoltage() {
return adaptee.getVoltage()/2;
}
}
แสดง การสร้างคลาส Adapter ซึ่งสืบทอดมาจากแอ็บสแตรกคลาส Target และทำการ override เม็ทธอด getVoltage ขึ้นมา ซึ่งทำหน้าที่แปลงแรงดันไฟฟ้า 220 โวลต์เป็น 110 โวลต์
class Power {
private int voltage;
Power(int voltage) {
this.voltage = voltage;
}
public int getVoltage() {
return voltage;
}
}
แสดงคลาส Power ซึ่งมีคอนสตรัคเตอร์ ที่กำหนดค่าแรงดันไฟฟ้าได้ และมีเม็ทธอด getValtage ที่ส่งค่าระดับแรงดันไฟฟ้าออกมา
อ้างอิง
[แก้]- http://xnanoob.exteen.com/20080416/adapter-pattern เก็บถาวร 2008-05-26 ที่ เวย์แบ็กแมชชีน
- http://en.wikipedia.org/wiki/Adapter_pattern
แหล่งข้อมูลอื่น
[แก้]- http://www.vbdotnetheaven.com/UploadFile/rajeshvs/AdapterPattern05272005031848AM/AdapterPattern.aspx เก็บถาวร 2007-10-13 ที่ เวย์แบ็กแมชชีน Adapter Pattern in VB.NET
- http://www.c-sharpcorner.com/UploadFile/rajeshvs/AdapterPatternInCS11142005005135AM/AdapterPatternInCS.aspx Adapter Pattern in C#