วิธีแก้ปัญหาวิธีคงที่ของอินเตอร์เฟส Java?

เรามีอินเทอร์เฟซ REST ที่กำหนด:

POST /calculation
<data>abc</data>

การคำนวณนี้สามารถนำไปใช้โดย "เครื่องคิดเลข" เชิงตรรกะที่แตกต่างกัน ขึ้นอยู่กับการกำหนดค่าเซิร์ฟเวอร์

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

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

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


person Marcus Leon    schedule 12.11.2009    source แหล่งที่มา


คำตอบ (4)


สำหรับฉันดูเหมือนว่าคุณต้องการอินเทอร์เฟซกับวิธีการที่ประกาศตามปกติและคลาสการใช้งาน จากนั้นเพียงสร้างอินสแตนซ์เดียวของสิ่งนี้ ไม่มีเหตุผล per se สำหรับวิธีการที่จะคงที่

person Brian Agnew    schedule 12.11.2009

ไร้สัญชาติไม่ได้หมายความว่าคงที่ ไร้สถานะหมายความว่าส่วนประกอบนั้นไม่ต้องอาศัยสถานะ ฉันพูดว่าส่วนประกอบเนื่องจากการใช้งานอินเทอร์เฟซของคุณทั้งหมดนั้นไม่มีสถานะจริง ๆ - มันจะไม่มีตัวแปรสมาชิกใด ๆ ดังนั้นคลาสการใช้งานหลายอินสแตนซ์จึงสมบูรณ์แบบ โดยเฉพาะอย่างยิ่งถ้าคุณมีบริบทในการจัดการสิ่งเหล่านี้ เช่น Spring หรือ EJB

person Bozho    schedule 12.11.2009

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

person Daniel Schneller    schedule 12.11.2009

หากไม่มีคลาสใดที่ใช้อินเทอร์เฟซนี้ไม่จำเป็นต้องเปลี่ยนการใช้งาน ให้ใช้ static method ในอินเทอร์เฟซเป็นเมธอด helper

คุณไม่จำเป็นต้องแก้ไขปัญหาใดๆ ด้วยเวอร์ชัน java 8

Java 8 รองรับวิธีการแบบคงที่ในส่วนต่อประสาน ดูหน้าในเอกสารประกอบนี้

วิธีการคงที่:

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

วิธีนี้ช่วยให้คุณจัดระเบียบวิธีการช่วยเหลือในไลบรารีของคุณได้ง่ายขึ้น คุณสามารถระบุ static methods เฉพาะเจาะจงให้กับ interface ใน interface เดียวกันได้ แทนที่จะระบุใน separate class

วิธีแก้ไขปัญหาอื่นของคุณคือการใช้ Singleton ตามที่แนะนำในคำตอบที่ยอมรับ

person Ravindra babu    schedule 18.02.2016