Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

เมื่อใดควรใช้คลาสนามธรรมและเมื่อใดควรใช้อินเทอร์เฟซใน Java


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

เมื่อใดควรใช้คลาสนามธรรม

  • คลาสนามธรรมเป็นทางเลือกที่ดีหากเราใช้แนวคิดการสืบทอด เนื่องจากมีการนำคลาสพื้นฐานทั่วไปไปใช้งานกับคลาสที่ได้รับ
  • คลาสนามธรรมก็ดีเช่นกัน หากเราต้องการประกาศสมาชิกที่ไม่เปิดเผยต่อสาธารณะ ในอินเทอร์เฟซ วิธีการทั้งหมดต้องเป็นแบบสาธารณะ
  • หากเราต้องการเพิ่มเมธอดใหม่ในอนาคต คลาสนามธรรมก็เป็นทางเลือกที่ดีกว่า เพราะหากเราเพิ่มเมธอดใหม่ให้กับอินเทอร์เฟซ คลาสทั้งหมดที่ใช้อินเทอร์เฟซนั้นจะต้องเปลี่ยนเพื่อใช้เมธอดใหม่
  • ถ้าเราต้องการสร้างหลายเวอร์ชันของคอมโพเนนต์ของเรา ให้สร้างคลาสนามธรรม คลาสนามธรรมเป็นวิธีที่ง่ายและสะดวกในการกำหนดเวอร์ชันคอมโพเนนต์ของเรา โดยการอัปเดตคลาสพื้นฐาน คลาสที่สืบทอดทั้งหมดจะได้รับการอัปเดตโดยอัตโนมัติพร้อมกับการเปลี่ยนแปลง ในทางกลับกัน อินเทอร์เฟซไม่สามารถเปลี่ยนแปลงได้เมื่อสร้างแล้ว หากจำเป็นต้องใช้อินเทอร์เฟซเวอร์ชันใหม่ เราต้องสร้างอินเทอร์เฟซใหม่ทั้งหมด
  • คลาสนามธรรมมีข้อได้เปรียบในการช่วยให้ส่งต่อกันได้ดีกว่า เมื่อลูกค้าใช้อินเทอร์เฟซแล้ว เราไม่สามารถเปลี่ยนแปลงได้ หากพวกเขาใช้คลาสนามธรรม เราก็สามารถเพิ่มพฤติกรรมได้โดยไม่ทำลายโค้ดที่มีอยู่
  • หากเราต้องการให้ฟังก์ชันการใช้งานทั่วไปที่นำไปใช้งานในส่วนประกอบทั้งหมดของเรา ให้ใช้คลาสนามธรรม คลาสนามธรรมช่วยให้เราสามารถปรับใช้คลาสของเราได้บางส่วน ในขณะที่อินเทอร์เฟซไม่มีการนำไปใช้สำหรับสมาชิกใดๆ

ตัวอย่าง

abstract class Car {
   public void accelerate() {
      System.out.println("Do something to accelerate");
   }
   public void applyBrakes() {
      System.out.println("Do something to apply brakes");
   }
   public abstract void changeGears();
}

ตอนนี้ รถยนต์ทุกคันที่ต้องการสร้างอินสแตนซ์จะต้องใช้เมธอด changeGears ()

class Alto extends Car {
   public void changeGears() {
      System.out.println("Implement changeGears() method for Alto Car");
   }
}
class Santro extends Car {
   public void changeGears() {
      System.out.println("Implement changeGears() method for Santro Car");
   }
}

ควรใช้อินเทอร์เฟซเมื่อใด

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

ตัวอย่าง

public interface Actor {
   void perform();
}
public interface Producer {
   void invest();
}

ทุกวันนี้นักแสดงส่วนใหญ่รวยพอที่จะสร้างหนังของตัวเองได้ หากเราใช้อินเทอร์เฟซมากกว่าคลาสนามธรรม เราสามารถใช้ทั้งนักแสดงและผู้ผลิต นอกจากนี้เรายังสามารถกำหนดอินเทอร์เฟซ ActorProducer ใหม่ที่ขยายทั้งสองได้

public interface ActorProducer extends Actor, Producer{
   // some statements
}