"Xin chào, Amigo! Lại là tôi đây. Tôi muốn cung cấp cho bạn một quan điểm khác về giao diện. Bạn thấy đấy, hầu hết thời gian một lớp là mô hình của một đối tượng cụ thể. Ngược lại, giao diện giống như khả năng của đối tượng hoặc vai trò, chứ không phải là chính đối tượng."

Ví dụ, những thứ như ô tô, xe đạp, xe máy và bánh xe được thể hiện tốt nhất dưới dạng các lớp và đối tượng. Nhưng các khả năng của họ, như «Tôi có thể di chuyển», «Tôi có thể chở người» và «Tôi có thể đỗ xe», được thể hiện tốt hơn dưới dạng giao diện. Kiểm tra ví dụ này:

mã Java Sự miêu tả
interface Moveable
{
void move(String newAddress);
}
Tương ứng với khả năng di chuyển.
interface Driveable
{
void drive(Driver driver);
}
Tương ứng với khả năng di chuyển.
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
Tương ứng với khả năng chuyên chở hàng hóa.
class Wheel implements Moveable
{
...
}
Một lớp «bánh xe». Có khả năng di chuyển.
class Car implements Moveable, Drivable, Transport
{
...
}
Một hạng «xe hơi». Có khả năng di chuyển, được điều khiển bởi một người và chở hàng.
class Skateboard implements Moveable, Driveable
{
...
}
Một lớp «trượt ván». Có khả năng di chuyển và được điều khiển bởi một người.

Giao diện đơn giản hóa đáng kể cuộc sống của lập trình viên. Các chương trình thường có hàng nghìn đối tượng, hàng trăm lớp và chỉ vài chục giao diện (vai trò). Có ít vai trò, nhưng chúng có thể được kết hợp theo nhiều cách (lớp).

Toàn bộ vấn đề là bạn không phải viết mã xác định tương tác với mọi lớp khác. Tất cả những gì bạn phải làm là tương tác với các vai trò (giao diện).

Hãy tưởng tượng rằng bạn là một người chế tạo robot. Bạn có hàng chục robot cấp dưới và mỗi người trong số họ có thể có nhiều kỹ năng. Giả sử bạn cần khẩn trương hoàn thành việc xây dựng một bức tường. Bạn chỉ cần lấy tất cả các robot có khả năng "xây dựng" và bảo chúng xây tường. Bạn không thực sự quan tâm robot nào làm việc đó. Hãy để nó là một bình tưới nước robot. Nếu nó biết cách xây dựng, hãy để nó xây dựng.

Đây là cách nó trông như thế nào trong mã:

mã Java Sự miêu tả
static interface WallBuilder
{
void buildWall();
}
Khả năng «xây tường». Hiểu lệnh «xây tường» (có cách làm phù hợp).
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
Robot có khả năng/kỹ năng này.

Việc tưới nước không thể xây dựng một bức tường (nó không triển khai giao diện 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();
   }
  }
 }
}
Làm thế nào để chúng ta ra lệnh xây tường?

"Điều đó thật thú vị. Tôi chưa bao giờ mơ rằng các giao diện có thể là một chủ đề thú vị như vậy."

"Và sau đó là một số! Cùng với tính đa hình, nó hoàn toàn gây ấn tượng."