เรื่องสั้น: บุรุษไปรษณีย์จะถูกขอให้กลับบ้านหลังบ้านและได้รับความคุ้มครองประกอบด้วย (จดหมาย, เอกสาร, เช็ค, บัตรของขวัญ, ใบสมัคร, จดหมายรัก) พร้อมที่อยู่ที่จะส่ง
สมมติว่าไม่มีที่กำบังและขอให้บุรุษไปรษณีย์กลับบ้านหลังบ้านและรับทุกสิ่งและส่งมอบให้กับคนอื่นบุรุษไปรษณีย์อาจสับสน
ดังนั้นควรห่อหุ้มด้วยดีกว่า (ในเรื่องราวของเรามันคือส่วนต่อประสาน) จากนั้นเขาจะทำงานให้ดี
ตอนนี้งานของบุรุษไปรษณีย์คือการรับและส่งมอบความคุ้มครองเท่านั้น (เขาจะไม่ใส่ใจสิ่งที่อยู่ในหน้าปก)
สร้างประเภทของ interface
ไม่ใช่ประเภทจริง แต่ใช้กับประเภทจริง
ในการสร้างอินเทอร์เฟซหมายความว่าองค์ประกอบของคุณได้รับ พอดีกับส่วนที่เหลือของรหัสได้อย่างง่ายดาย
ฉันยกตัวอย่างให้คุณ
คุณมีส่วนต่อประสาน AirPlane ดังนี้
interface Airplane{
parkPlane();
servicePlane();
}
สมมติว่าคุณมีวิธีการในคลาส Controller ของคุณเช่น Planes
parkPlane(Airplane plane)
และ
servicePlane(Airplane plane)
ดำเนินการในโปรแกรมของคุณ มันจะไม่ทำลายรหัสของคุณ ฉันหมายความว่ามันไม่จำเป็นต้องเปลี่ยนตราบใดที่ยอมรับข้อโต้แย้งเป็นAirPlane
ฉันหมายความว่ามันไม่จำเป็นต้องเปลี่ยนตราบเท่าที่มันยอมรับข้อโต้แย้ง
เพราะมันจะยอมรับเครื่องบินใด ๆ แม้จะมีประเภทที่เกิดขึ้นจริงflyer
, highflyr
,fighter
ฯลฯ
นอกจากนี้ในคอลเล็กชัน:
List<Airplane> plane;
// จะใช้เครื่องบินของคุณทั้งหมด
ตัวอย่างต่อไปนี้จะล้างความเข้าใจของคุณ
คุณมีเครื่องบินรบที่ใช้มันดังนั้น
public class Fighter implements Airplane {
public void parkPlane(){
// Specific implementations for fighter plane to park
}
public void servicePlane(){
// Specific implementatoins for fighter plane to service.
}
}
สิ่งเดียวกันสำหรับ HighFlyer และ clasess อื่น ๆ :
public class HighFlyer implements Airplane {
public void parkPlane(){
// Specific implementations for HighFlyer plane to park
}
public void servicePlane(){
// specific implementatoins for HighFlyer plane to service.
}
}
ตอนนี้คิดว่าคลาสคอนโทรลเลอร์ของคุณใช้AirPlane
หลายครั้ง
สมมติว่าคลาสคอนโทรลเลอร์ของคุณเป็น ControlPlane เหมือนด้านล่าง
public Class ControlPlane{
AirPlane plane;
// so much method with AirPlane reference are used here...
}
ความมหัศจรรย์มาที่นี่เพราะคุณสามารถสร้างAirPlane
อินสแตนซ์ชนิดใหม่ของคุณได้มากเท่าที่คุณต้องการและคุณไม่ได้เปลี่ยนรหัสของControlPlane
คลาส
คุณสามารถเพิ่มอินสแตนซ์ ...
JumboJetPlane // implementing AirPlane interface.
AirBus // implementing AirPlane interface.
คุณสามารถลบอินสแตนซ์ของประเภทที่สร้างไว้ก่อนหน้านี้ด้วย