รู้เบื้องต้นเกี่ยวกับรูปแบบโรงงาน
รูปแบบการออกแบบเป็นวิธีการแก้ปัญหาที่เกิดซ้ำในการออกแบบซอฟต์แวร์ รูปแบบโรงงานเป็นหนึ่งในรูปแบบการออกแบบที่ช่วยในการสร้างวัตถุในลักษณะที่ยืดหยุ่นและแยกส่วน
Factory Pattern เป็นรูปแบบการออกแบบเชิงสร้างสรรค์ใน C++ ที่อนุญาตให้สร้างอ็อบเจกต์โดยไม่ต้องรู้คลาสของออบเจกต์อย่างชัดเจน ให้วิธีการสรุปตรรกะการสร้างวัตถุที่ซับซ้อนภายในคลาสโรงงานที่แยกจากกัน สิ่งนี้ทำได้โดยการกำหนดอินเทอร์เฟซทั่วไปสำหรับการสร้างออบเจกต์ โดยกำหนดคลาสเฉพาะของออบเจกต์ที่รันไทม์
แทนที่จะสร้างวัตถุโดยตรง เราใช้วิธีโรงงานเพื่อให้ตัวอย่างของวัตถุที่เราต้องการ ด้วยวิธีนี้ เราสามารถซ่อนขั้นตอนที่ซับซ้อนที่เกี่ยวข้องกับการสร้างวัตถุ และทำให้ง่ายต่อการเปลี่ยนแปลงหรือแก้ไขวัตถุในอนาคต
ทำไมต้องใช้รูปแบบโรงงาน?
มีเหตุผลหลายประการที่เราอาจต้องการใช้รูปแบบโรงงาน เหตุผลหนึ่งคืออนุญาตให้แยกโค้ดจากคลาสเฉพาะได้ โดยใช้วิธีการจากโรงงาน เราสามารถเปลี่ยนคลาสหนึ่งเป็นอีกคลาสหนึ่งได้อย่างง่ายดายโดยไม่ต้องเปลี่ยนรหัสอื่น และทำให้มีประสิทธิภาพมากขึ้น
อีกเหตุผลหนึ่งในการใช้รูปแบบโรงงานคือทำให้โค้ดสามารถทดสอบได้มากขึ้น รูปแบบโรงงานช่วยให้เราสามารถทดสอบรหัสโดยการสร้างวัตถุจำลอง
ต่อไปนี้เป็นเหตุผลเพิ่มเติมว่าทำไมจึงใช้รูปแบบโรงงานใน C ++:
- รูปแบบ Factory Method จะใช้เมื่อคลาสไม่ทราบล่วงหน้าว่าต้องการสร้างวัตถุใด
- รูปแบบนี้ใช้เมื่อคลาสอาศัยคลาสย่อยเพื่อระบุวัตถุที่สร้าง
- มีประโยชน์เมื่อคุณต้องการสรุปตรรกะสำหรับการสร้างวัตถุที่ซับซ้อนในที่เดียว
ตัวอย่าง Factory Pattern ใน C++
ใน C++ เราสามารถนำรูปแบบโรงงานไปใช้โดยการกำหนดคลาสพื้นฐานที่เป็นนามธรรมด้วยวิธีโรงงานเสมือน วิธีนี้ควรส่งคืนตัวชี้ไปยังอินสแตนซ์ของคลาสที่ต้องการ หลังจากนั้น เราสามารถได้รับคลาสที่เป็นรูปธรรมจากคลาสพื้นฐานนี้ และแทนที่เมธอดโรงงานเพื่อส่งคืนอินสแตนซ์ของคลาสที่เหมาะสม
ต่อไปนี้เป็นตัวอย่างของวิธีที่เราอาจใช้รูปแบบโรงงานนี้:
#รวมถึงใช้เนมสเปซมาตรฐาน ;
รูปร่างคลาส {
สาธารณะ :
เสมือน เป็นโมฆะ วาด ( ) = 0 ;
คงที่ รูปร่าง * สร้างรูปร่าง ( นานาชาติ พิมพ์ ) ;
} ;
วงกลมชั้น : รูปร่างสาธารณะ {
สาธารณะ :
เป็นโมฆะ วาด ( ) {
ศาล << 'วาดวงกลม' << จบ ;
}
} ;
คลาสสี่เหลี่ยมผืนผ้า : รูปร่างสาธารณะ {
สาธารณะ :
เป็นโมฆะ วาด ( ) {
ศาล << 'วาดรูปสี่เหลี่ยมผืนผ้า' << จบ ;
}
} ;
รูปร่าง * รูปร่าง :: สร้างรูปร่าง ( นานาชาติ พิมพ์ ) {
ถ้า ( พิมพ์ == 1 ) {
กลับ วงกลมใหม่ ( ) ;
} อื่น ถ้า ( พิมพ์ == 2 ) {
กลับ สี่เหลี่ยมผืนผ้าใหม่ ( ) ;
} อื่น {
กลับ nullptr ;
}
}
นานาชาติ หลัก ( ) {
รูปร่าง * วงกลม = รูปร่าง :: สร้างรูปร่าง ( 1 ) ;
วงกลม -> วาด ( ) ;
รูปร่าง * สี่เหลี่ยมผืนผ้า = รูปร่าง :: สร้างรูปร่าง ( 2 ) ;
สี่เหลี่ยมผืนผ้า -> วาด ( ) ;
กลับ 0 ;
}
ในตัวอย่างนี้ เรามีคลาส Shape ที่มีคลาสที่ได้รับมา 2 คลาส ได้แก่ Circle และ Rectangle คลาส Shape มีการวาดฟังก์ชันเสมือนบริสุทธิ์ () ซึ่งใช้งานโดยคลาสที่ได้รับ คลาส Shape ยังมีฟังก์ชันสแตติก createShape (ประเภท int) ซึ่งทำหน้าที่เป็นเมธอดโรงงานในการสร้างอินสแตนซ์ของคลาสที่ได้รับตามประเภทที่ระบุ ฟังก์ชันการวาด () ถูกเรียกบนวัตถุที่สร้างขึ้นเพื่อแสดงพฤติกรรมเฉพาะ
บทสรุป
Factory Pattern เป็นรูปแบบการออกแบบเชิงสร้างสรรค์ใน C++ ที่อนุญาตให้สร้างอ็อบเจกต์โดยไม่ต้องรู้คลาสของออบเจกต์อย่างชัดเจน มีอินเทอร์เฟซที่เรียบง่ายสำหรับการสร้างวัตถุโดยซ่อนตรรกะการสร้างที่ซับซ้อนไว้เบื้องหลังคลาสโรงงาน สิ่งนี้ทำได้โดยการกำหนดอินเทอร์เฟซทั่วไปสำหรับการสร้างออบเจกต์ โดยกำหนดคลาสเฉพาะของออบเจกต์ที่รันไทม์ อ่านเพิ่มเติมเกี่ยวกับรูปแบบของโรงงานได้ในบทความนี้