CodeGym /หลักสูตร /จาวาคอร์ /อินเทอร์เฟซเป็นมากกว่าอินเทอร์เฟซ มันเป็นพฤติกรรม

อินเทอร์เฟซเป็นมากกว่าอินเทอร์เฟซ มันเป็นพฤติกรรม

จาวาคอร์
ระดับ, บทเรียน
มีอยู่

"สวัสดี 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();
   }
  }
 }
}
เราจะออกคำสั่งให้สร้างกำแพงได้อย่างไร?

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

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

3
งาน
จาวาคอร์, ระดับ, บทเรียน
ล็อค
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and assimilate some material. What's more, you combat laziness.
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION