ฉันมีวัตถุสองชิ้นที่แสดงถึง 'บาร์ / คลับ' (สถานที่ที่คุณดื่ม / สังสรรค์)
ในสถานการณ์หนึ่งฉันต้องการชื่อบาร์ที่อยู่ระยะทางสโลแกน
ในสถานการณ์อื่นฉันต้องการชื่อบาร์, ที่อยู่, URL เว็บไซต์, โลโก้
ดังนั้นฉันจึงมีวัตถุสองชิ้นที่เป็นตัวแทนของสิ่งเดียวกัน แต่มีเขตข้อมูลที่แตกต่างกัน
ผมชอบที่จะใช้วัตถุที่ไม่เปลี่ยนรูปเพื่อให้ทุกสาขามีการตั้งค่าจากตัวสร้าง
ตัวเลือกหนึ่งคือการมีสองคอนสตรัคเตอร์และโมฆะสาขาอื่น ๆ เช่น:
class Bar {
private final String name;
private final Distance distance;
private final Url url;
public Bar(String name, Distance distance){
this.name = name;
this.distance = distance;
this.url = null;
}
public Bar(String name, Url url){
this.name = name;
this.distance = null;
this.url = url;
}
// getters
}
ฉันไม่ชอบสิ่งนี้เพราะคุณจะต้องตรวจสอบ null เมื่อคุณใช้ getters
ในตัวอย่างจริงของฉันสถานการณ์แรกมี 3 ฟิลด์และสถานการณ์ที่สองมีประมาณ 10 ดังนั้นมันจึงเป็นความเจ็บปวดที่แท้จริงที่มีสองคอนสตรัคเตอร์จำนวนฟิลด์ที่ฉันจะต้องประกาศว่างแล้วเมื่อวัตถุที่คุณใช้คุณจะไม่ ไม่ทราบว่าBar
คุณกำลังใช้ที่ใดและฟิลด์ใดเป็นโมฆะและอะไรที่ไม่ได้
ฉันมีตัวเลือกอื่น ๆ อีกบ้าง?
สองคลาสเรียกว่าBarPreview
และBar
?
การสืบทอด / อินเตอร์เฟสบางประเภท?
มีอะไรอีกบ้างที่ยอดเยี่ยม?
You should only ask practical, answerable questions based on actual problems that you face.
และนั่นคือสิ่งที่เกิดขึ้นที่นี่
Bar
ตัวระบุที่ถูกต้องตามกฎหมายแล้ว!