การสมัครมีบทคัดย่อชั้นเรียนจำนวนมากในใบสมัครของคุณหรือไม่?


9

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

เมื่อมันปรากฏออกมาเรามีคลาสนามธรรมที่ใช้วิธีการทั่วไป 3 - 5 วิธีและเหลือเพียงวิธีเดียวสำหรับการใช้งานที่แตกต่างนั่นคือกลยุทธ์

อัปเดต: จากคลาสนามธรรมจำนวนมากฉันหมายถึงมีฟังก์ชันระดับสูงที่แตกต่างกัน 6 อย่างคือ 6 แพ็คเกจและแต่ละชุดมีอินเตอร์เฟส + AbstractImpl + (ชุดของ Actual Impl)

นี่เป็นการออกแบบที่ไม่ดี แต่อย่างใด?

มุมมองเชิงลบใด ๆ ในแง่ของการเพิ่มความสามารถในภายหลัง - ฉันเตรียมความพร้อมสำหรับการตรวจสอบรหัส / การออกแบบกับผู้สูงอายุ

คำตอบ:


8

ไม่นี่ไม่ได้เป็นการออกแบบที่แย่เลย มันเป็นรูปแบบวิธีการแม่แบบ

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

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


4

ไม่มันค่อนข้างโอเค (ขึ้นอยู่กับรายละเอียด - มันยากที่จะพูดเพิ่มเติมกับความรู้เล็ก ๆ น้อย ๆ เกี่ยวกับกรณีที่เป็นรูปธรรมของคุณ) มันเป็นเรื่องที่สมบูรณ์แบบที่จะรวมการใช้วิธีการทั่วไปในคลาสฐานที่เป็นนามธรรม

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


1

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


0

หากคลาสนามธรรมกำลังสอดแทรกวิธีการเดียวกันด้วยเนื้อหาเดียวกันเหตุใดจึงมีคลาสนามธรรมหลายคลาส?

หากพวกเขาใช้วิธีการต่างกันฉันก็ไม่เห็นปัญหา

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.