- รูปแบบทั้งสามนี้แตกต่างกันอย่างไร
โรงงาน:สร้างวัตถุโดยไม่ต้องเปิดเผยตรรกะการสร้างอินสแตนซ์ให้กับลูกค้า
วิธีการจากโรงงาน:กำหนดอินเทอร์เฟซสำหรับการสร้างวัตถุ แต่ให้คลาสย่อยตัดสินใจว่าคลาสใดจะสร้างอินสแตนซ์ เมธอด Factory อนุญาตให้คลาสเลื่อนการอินสแตนซ์ไปที่คลาสย่อย
บทคัดย่อจากโรงงาน:เป็นอินเทอร์เฟซสำหรับการสร้างตระกูลของวัตถุที่เกี่ยวข้องหรือขึ้นอยู่กับโดยไม่ต้องระบุคลาสที่เป็นรูปธรรม
รูปแบบAbstractFactoryใช้การจัดองค์ประกอบเพื่อมอบหมายความรับผิดชอบในการสร้างวัตถุไปยังคลาสอื่นในขณะที่รูปแบบการออกแบบวิธีโรงงานใช้การสืบทอดและอาศัยคลาสที่ได้รับหรือคลาสย่อยเพื่อสร้างวัตถุ
- จะใช้เมื่อใด
โรงงาน:ลูกค้าเพียงแค่ต้องการชั้นเรียนและไม่สนใจว่าจะมีการติดตั้งที่เป็นรูปธรรมหรือไม่
วิธีการจากโรงงาน:ลูกค้าไม่ทราบว่าจะต้องสร้างคลาสที่เป็นรูปธรรมในขณะทำงาน แต่เพียงแค่ต้องการได้รับคลาสที่จะทำงานได้
AbstactFactory: เมื่อระบบของคุณต้องสร้างหลายตระกูลของผลิตภัณฑ์หรือคุณต้องการจัดหาไลบรารีของผลิตภัณฑ์โดยไม่ต้องเปิดเผยรายละเอียดการใช้งาน
บทคัดย่อคลาสของโรงงานมักถูกนำไปใช้กับวิธีการของโรงงาน โดยทั่วไปแล้ววิธีการของโรงงานจะถูกเรียกใช้ภายในวิธีการแบบ
- และถ้าเป็นไปได้ตัวอย่าง Java ใด ๆ ที่เกี่ยวข้องกับรูปแบบเหล่านี้?
โรงงานและโรงงานวิธีการ
เจตนา:
กำหนดอินเทอร์เฟซสำหรับการสร้างวัตถุ แต่ให้คลาสย่อยตัดสินใจว่าคลาสใดจะสร้างอินสแตนซ์ วิธีการจากโรงงานช่วยให้การเลื่อนชั้นเรียนเลื่อนระดับเป็นคลาสย่อย
แผนภาพ UML :
ผลิตภัณฑ์:กำหนดอินเทอร์เฟซของวัตถุที่วิธีการสร้างจากโรงงาน
ผลิตภัณฑ์คอนกรีต:ใช้ส่วนต่อประสานผลิตภัณฑ์
ผู้สร้าง:ประกาศวิธีการของโรงงาน
ConcreateCreator: ใช้เมธอด Factory เพื่อส่งคืนอินสแตนซ์ของ ConcreteProduct
ข้อความแจ้งปัญหา: สร้าง Factory of Games โดยใช้ Factory Methods ซึ่งเป็นตัวกำหนดส่วนต่อประสานเกม
ข้อมูลโค้ด:
รูปแบบโรงงาน จะใช้วิธีการจากโรงงานเมื่อใด
เปรียบเทียบกับรูปแบบการสร้างสรรค์อื่น ๆ :
การออกแบบเริ่มต้นโดยใช้วิธีการจากโรงงาน (ซับซ้อนน้อยลงปรับแต่งได้มากขึ้นเพิ่มคลาสย่อย) และพัฒนาไปสู่Abstract Factory, Prototype หรือ Builder (ยืดหยุ่นมากขึ้นซับซ้อนมากขึ้น) เมื่อผู้ออกแบบพบว่าต้องการความยืดหยุ่นมากขึ้น
บทคัดย่อคลาสของโรงงานมักถูกนำไปใช้กับวิธีการของโรงงานแต่ก็สามารถนำไปใช้งานได้โดยใช้Prototype
การอ้างอิงสำหรับการอ่านเพิ่มเติม: รูปแบบการออกแบบซอร์สโค้ด