ประโยชน์ของการใช้คลาสตัวสร้างภายในแบบคงที่


9

ในระหว่างการเขียนแนวทางรหัสสำหรับ บริษัท ฉันพบว่าตัวเองแนะนำให้ใช้รูปแบบตัวสร้างจาก Effective Java แทนที่จะเป็นตัวสร้างแบบ telescopic

อย่างไรก็ตามหลังจากคิดไปอีกเล็กน้อยแน่นอนว่าทางออกที่ดีกว่าคือการลบคลาส builder ออกและยังลบ constructors พิเศษด้วยอาร์กิวเมนต์ที่เป็นทางเลือก

ดังนั้นเพียงแค่มีคอนสตรัคเตอร์เดียวที่มีพารามิเตอร์ที่ต้องการ getters / setters ปกติและใส่รหัส เมื่อใช้งานเพียงสร้างอินสแตนซ์ใหม่ของวัตถุ yr จากนั้นตั้งค่า

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

รูปแบบตัวสร้างมีประโยชน์เมื่อคุณสร้างอินสแตนซ์ใหม่จำนวนมากเนื่องจาก IDE สามารถทำงานได้อย่างมีประสิทธิภาพและหากมีพารามิเตอร์ทางเลือกจำนวนมาก (15+) อย่างไรก็ตามมันคุ้มค่ากับการต่อเวลาพิเศษในการเขียนคลาสภายในแบบคงที่คุณจะแนะนำให้ใช้ตัวสร้างหรือเสียเวลาหรือไม่?


คำตอบ:


8

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

หากฉันพบว่ามีค่าที่เป็นตัวเลือกมากมายหรือสัดส่วนที่มากกว่าของค่าตัวเลือกมีแนวโน้มที่จะเปลี่ยนแปลงจากค่าเริ่มต้นพวกเขาจะใช้รูปแบบตัวสร้าง (ตัวสร้างแบบคงที่ภายในหรือแบบอื่น ๆ ที่คล้ายกัน)

โดยทั่วไปแล้ว Josh ให้คำแนะนำที่ดีงาม - สิ่งที่ดีที่สุดที่ฉันชอบเกี่ยวกับเขาคือคำแนะนำมาจากร่องลึก - เขายอมรับว่าเขาทำผิดพลาดในการออกแบบชิ้นส่วนของ Java และ Java ที่มีประสิทธิภาพเป็นส่วนหนึ่งของ 'การรักษา' พูด :-)


1
นี้ไม่ได้พูดอะไรเกี่ยวกับสาเหตุที่ชั้นควรจะคงที่ ...
จิมมี่ฮอฟฟา

ความไม่สามารถเปลี่ยนได้และผลข้างเคียงฟรีก็เป็นเป้าหมายเช่นกัน
Martijn Verburg

6

รูปแบบตัวสร้างของ Josh Bloch เหมือนกับรูปแบบตัวสร้าง GoF เสนอวิธีการสร้างวัตถุที่ไม่เปลี่ยนรูปพร้อมข้อมูลเริ่มต้นจำนวนมากโดยไม่ต้องมีรายการของตัวสร้างแบบโยงยาว

หากคุณ "มีคอนสตรัคเตอร์เดียวที่มีพารามิเตอร์ที่ต้องการ getters / setters ปกติ" ดังนั้นวัตถุของคุณจะไม่เปลี่ยนรูปอีกต่อไป กล่าวคือ คุณสามารถเปลี่ยนมันได้นานหลังจากสร้างอินสแตนซ์

หากนั่นไม่ใช่ปัญหาสำหรับคุณคุณไม่จำเป็นต้องใช้รูปแบบตัวสร้างในตอนแรก หากเป็นปัญหาแสดงว่าทางออกของคุณมีข้อบกพร่อง


ฉันไม่คิดว่ารูปแบบตัวสร้างมีส่วนเกี่ยวข้องกับความผันแปรแม้ตัวอย่าง gof ในวิกินั้นไม่แน่นอน ... en.wikipedia.org/wiki/Builder_pattern#Javaรูปแบบมีประโยชน์ที่ฉันได้อธิบายไว้ในคำถาม
NimChimpsky

3
@NimChimpsky: ไม่ว่ารูปแบบของตัวสร้างสามารถนำไปใช้เพื่อสร้างวัตถุที่ไม่แน่นอนได้หรือไม่ คำถามคือคุณควร? Getters และ setters อยู่เคียงข้างไปชั่วนิรันดร์ซึ่งวัตถุสามารถเปลี่ยนแปลงได้พวกมันเป็นวิธีการแก้ปัญหาที่สมบูรณ์แบบ แต่ผู้คนพบปัญหาทั่วไปในการสร้างวัตถุที่ไม่เปลี่ยนรูป: โซ่ที่ไม่สามารถจัดการได้ของตัวสร้าง ตัวสร้างเป็นโซลูชันทั่วไปและกลายเป็นรูปแบบเพื่อความสะดวกในการสื่อสาร
pdr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.