รูปแบบการสร้างสรรค์: ต้นแบบ
บทความนี้กล่าวถึงวิธีการสร้างวัตถุใหม่จากวัตถุที่มีอยู่โดยใช้รูปแบบต้นแบบ
มันคืออะไร?
รูปแบบต้นแบบเป็นรูปแบบการสร้างวัตถุใหม่ที่สร้างขึ้นโดยการคัดลอกวัตถุที่มีอยู่ วัตถุที่ทำสำเนาเรียกว่าต้นแบบ เพื่อให้เข้าใจออบเจกต์ได้ดีขึ้น คุณสามารถพิจารณาออบเจกต์ต้นแบบว่าเป็น "เมล็ดพันธุ์" ที่สร้างออบเจกต์อื่นๆ ทั้งหมด ดังนั้นคุณอาจถามว่าทำไมคุณไม่สร้างวัตถุใหม่เมื่อจำเป็นแทนที่จะคัดลอกวัตถุที่มีอยู่ แรงจูงใจสำหรับวัตถุต้นแบบมีดังนี้:
- บางครั้งการสร้างวัตถุใหม่มีราคาแพงกว่าการคัดลอกวัตถุที่มีอยู่
- ลองนึกภาพถ้าคุณไม่สามารถเข้าถึงตัวสร้างคลาสแบบคงที่ได้ และสภาพแวดล้อมรันไทม์ต้องสร้างอินสแตนซ์ของแต่ละคลาสที่โหลดแบบไดนามิก แอปพลิเคชันสามารถขอวัตถุจากผู้จัดการต้นแบบที่จะส่งคืนการโคลนของต้นแบบแทน
- คุณสามารถลดจำนวนคลาสในระบบได้อย่างมากโดยเปลี่ยนค่าของอ็อบเจ็กต์ที่โคลนจากอินสแตนซ์ต้นแบบ
แผนภาพคลาส
แผนภาพชั้นเรียนประกอบด้วยเอนทิตีต่อไปนี้:
- ต้นแบบ
- ต้นแบบคอนกรีต
- ลูกค้า
ลองมาดูตัวอย่างเครื่องบินเพื่อทำความเข้าใจรูปแบบต้นแบบกันดีกว่า ขั้นแรก เราสร้างคลาสเพื่อเป็นตัวแทนของ F-16 แต่เรารู้ว่า F-16 มีบางสายพันธุ์ ดังนั้นเพื่อแสดงถึงแต่ละตัวแปรของ F16 เราสามารถสร้างคลาสย่อยได้ แต่จากนั้นเราจะลงเอยด้วยคลาสย่อยหลายคลาสในระบบของเรา นอกจากนี้ สมมติว่ารุ่น F16 แตกต่างกันตามประเภทเครื่องยนต์เท่านั้น ความเป็นไปได้อย่างหนึ่งก็คือคงคลาส F16 ไว้แต่เพิ่มวิธีการตั้งค่าประเภทเครื่องยนต์ของเครื่องบิน ด้วยวิธีนี้ เราสามารถสร้างวัตถุ F16 ชิ้นเดียวเป็นต้นแบบและโคลนสำหรับเครื่องบินรุ่นต่างๆ ได้
ขั้นแรก เราสร้างอินเทอร์เฟซ
คลาส F-16 ใช้อินเทอร์เฟซดังนี้:
ลูกค้าสามารถใช้รูปแบบดังนี้:
โปรดทราบว่าวิธีการโคลนของ อิน เท อร์เฟซ IAircraftPrototypeส่งคืนประเภทนามธรรม ลูกค้าไม่ทราบว่าการใช้งานที่แตกต่างกันของอินเทอร์เฟซเดียวกันจะสร้างคลาสย่อยที่เป็นรูปธรรมได้อย่างไร ตัวอย่างเช่นสามารถส่งผ่านคลาสของBoeing747 ได้ โดยสร้างสำเนาของต้นแบบอะไรก็ตามที่ส่งผ่านเข้ามา (F16 หรือ Boeing747) รูปแบบต้นแบบช่วยลดการจัดคลาสย่อย เนื่องจากพฤติกรรมของวัตถุต้นแบบสามารถเปลี่ยนแปลงได้โดยการประกอบเข้ากับส่วนย่อย
สำเนาตื้นเทียบกับสำเนาลึก
รูปแบบต้นแบบต้องการคลาสต้นแบบหรืออินเทอร์เฟซเพื่อใช้เมธอดclone () การโคลนสามารถทำได้ทั้งแบบตื้นและลึก ตัวอย่างเช่น หากคลาส F-16 ของเรา มีออบเจกต์สมาชิกประเภทF16Engineในการคัดลอกแบบตื้น วัตถุที่โคลนจะชี้ไปที่ ออบเจ็กต์ F16Engine เดียวกัน กับต้นแบบ แต่ในการคัดลอกแบบลึก วัตถุที่ถูกโคลนจะได้รับสำเนาของวัตถุเครื่องยนต์และวัตถุใดๆ ที่ซ้อนอยู่ภายใน จะไม่มีการแบ่งปันฟิลด์ใดๆ — ซ้อนกันหรืออื่นๆ — ระหว่างต้นแบบและตัวโคลน
กำลังโหลดแบบไดนามิก
รูปแบบต้นแบบสามารถทำให้การโหลดคลาสแบบไดนามิกง่ายขึ้น การโหลดแบบไดนามิกทำให้คุณสามารถโหลดคลาสในขณะรันไทม์ แทนที่จะปล่อยให้คลาสพร้อมใช้งานในเวลาคอมไพล์ ในภาษาที่รองรับการโหลดแบบไดนามิก เฟรมเวิร์กจะสร้างอินสแตนซ์ของคลาสที่โหลดและลงทะเบียนในเอนทิตีการจัดการ จากนั้น ที่รันไทม์ แอปพลิเคชันของคุณสามารถขอให้ผู้จัดการนี้มอบวัตถุที่เป็นของคลาสนั้นให้กับคุณ
ตัวอย่างอื่นๆ
ในภาษาโปรแกรม Java คลาส Object มีวิธีการโคลน คลาสใช้อินเตอร์เฟสjava.lang.Cloneable
คำเตือน
การใช้ วิธี โคลนอาจเป็นเรื่องยากเนื่องจากการอ้างอิงแบบวงกลม





































![รายการที่เชื่อมโยงคืออะไร? [ส่วนที่ 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)