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

ตัวอย่างอะแด๊ปเตอร์แพตเทิร์นในขีวิตจริง แก้

                                                         ไฟล์:Adp1.jpg

จากรูป แสดงให้เห็นการใช้หลักการอะแด๊ปเตอร์ในชีวิตจริง เนื่องจากเต้ารับ กับเต้าเสียบมีอินเตอร์เฟสไม่เหมือนกัน ดังนั้นจึงใช้ตัวแปลงมาช่วย

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

                                                          

จากรูป ผู้เรียก (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"); {{ไมไดลงชื่|Torpedo|21:50, 1 งหาคม 2551 (ICT)}}
		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 ที่ส่งค่าระดับแรงดันไฟฟ้าออกมา


อ้างอิง แก้

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

Your account will be renamed แก้

16:21, 20 มีนาคม 2558 (ICT)

19:46, 19 เมษายน 2558 (ICT)