"สวัสดี Amigo ฉันเอง ฉันขอเสนออีกมุมมองหนึ่งเกี่ยวกับส่วนต่อประสาน คุณจะเห็นว่าส่วนใหญ่แล้วคลาสจะเป็นแบบจำลองของวัตถุหนึ่งๆ ในทางกลับกัน อินเทอร์เฟซเป็นเหมือนความสามารถของวัตถุหรือ บทบาทมากกว่าตัววัตถุเอง"

ตัวอย่างเช่น สิ่งต่างๆ เช่น รถยนต์ จักรยาน มอเตอร์ไซค์ และล้อ จะแสดงเป็นคลาสและวัตถุได้ดีที่สุด แต่ความสามารถของพวกเขา เช่น «ฉันเคลื่อนไหวได้» «ฉันบรรทุกคนได้» และ «ฉันจอดรถได้» นั้นแสดงได้ดีกว่าในอินเทอร์เฟซ ลองดูตัวอย่างนี้:

รหัสจาวา คำอธิบาย
interface Moveable
{
void move(String newAddress);
}
สอดคล้องกับความสามารถในการเคลื่อนไหว
interface Driveable
{
void drive(Driver driver);
}
สอดคล้องกับความสามารถในการเคลื่อนไหว
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
สอดคล้องกับความสามารถในการบรรทุกสินค้า
class Wheel implements Moveable
{
...
}
คลาส «ล้อ» มีความสามารถในการเคลื่อนที่
class Car implements Moveable, Drivable, Transport
{
...
}
คลาส «รถยนต์» มีความสามารถในการเคลื่อนย้าย ขับเคลื่อนด้วยคน และบรรทุกสินค้า
class Skateboard implements Moveable, Driveable
{
...
}
คลาส «สเก็ตบอร์ด» มีความสามารถในการเคลื่อนที่และถูกควบคุมโดยบุคคล

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

ประเด็นทั้งหมดคือคุณไม่จำเป็นต้องเขียนโค้ดที่กำหนดการโต้ตอบกับคลาสอื่นๆ ทุกคลาส สิ่งที่คุณต้องทำคือโต้ตอบกับบทบาท (อินเทอร์เฟซ)

ลองนึกภาพว่าคุณเป็นผู้สร้างหุ่นยนต์ คุณมีหุ่นยนต์ย่อยหลายสิบตัวและแต่ละตัวสามารถมีทักษะที่หลากหลาย สมมติว่าคุณต้องสร้างกำแพงให้เสร็จโดยด่วน คุณเพียงแค่นำหุ่นยนต์ทั้งหมดที่มีความสามารถในการ "สร้าง" และบอกให้พวกเขาสร้างกำแพง คุณไม่สนใจว่าหุ่นยนต์ตัวไหนทำ ให้มันเป็นหุ่นยนต์รดน้ำ ถ้ามันรู้วิธีสร้างก็ให้มันสร้าง

นี่คือลักษณะของโค้ด:

รหัสจาวา คำอธิบาย
static interface WallBuilder
{
void buildWall();
}
ความสามารถในการ «สร้างกำแพง». เข้าใจคำสั่ง «สร้างกำแพง» (มีวิธีการที่เหมาะสม)
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {}
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {}
}
static class WateringCan
{}
หุ่นยนต์ที่มีความสามารถ/ทักษะนี้

การรดน้ำไม่สามารถสร้างกำแพงได้ (ไม่ได้ใช้อินเทอร์เฟซ WallBuilder)

public static void main(String[] args)
{
 //add all robots to a list
 ArrayList robots = new ArrayList();
 robots.add(new WorkerRobot());
 robots.add(new GuardRobot());
 robots.add(new WateringCan());

 //build a wall if you can
 for (Object robot: robots)
 {
  if (robot instanceof WallBuilder)
  {
   WallBuilder builder = (WallBuilder) robot;
   builder.buildWall();
   }
  }
 }
}
เราจะออกคำสั่งให้สร้างกำแพงได้อย่างไร?

"น่าสนใจมาก ฉันไม่เคยคิดฝันมาก่อนว่าอินเทอร์เฟซจะเป็นหัวข้อที่น่าสนใจขนาดนี้"

"แล้วบางส่วน! เมื่อรวมกับความหลากหลายแล้วมันช่างเหลือเชื่อ"