อะแดปเตอร์ แพตเทิร์น

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

 โครงสร้างอะแด๊ปเตอร์แพตเทิร์น 

จากรูป ผู้เรียก (target) ต้องการเรียกใช้งาน เม็ทธอด SpecificRequset() แต่ไม่สามารถเรียกโดยตรงได้ เนื่องจากรูปแบบการเชื่อมต่อไม่สัมพันธ์กัน ดังนั้นจึงสร้าง คลาส Adapter มาเพื่อเรียกใช้งานผ่าน เม็ทธอด Request() ให้ไปเรียก เม็ทธอด SpecificRequest() อีกต่อหนึ่ง

 ตัวอย่างการใช้อะแด๊ปเตอร์แพตเทิร์น 
                                       ไฟล์:Adp3.jpg
ตัวอย่างที่โปรแกรมที่แสดง เป็นวิธีการนำอะแดปเตอร์แพตเทิร์นมาใช้งานจริง โดยสมมุติว่า มีแลปทอปอยู่เครื่องหนึ่ง ในการเปิดใช้งานต้องใช้ไฟฟ้าแรงดัน 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 
 http://en.wikipedia.org/wiki/Adapter_pattern

 แหล่งข้อมูลอื่น 
 http://www.vbdotnetheaven.com/UploadFile/rajeshvs/AdapterPattern05272005031848AM/AdapterPattern.aspx  Adapter Pattern in VB.NET
 http://www.c-sharpcorner.com/UploadFile/rajeshvs/AdapterPatternInCS11142005005135AM/AdapterPatternInCS.aspx Adapter Pattern in C#