รูปแบบการสร้างสรรค์: ต้นแบบ

Dec 04 2022
บทความนี้กล่าวถึงวิธีการสร้างวัตถุใหม่จากวัตถุที่มีอยู่โดยใช้รูปแบบต้นแบบ มันคืออะไร? รูปแบบต้นแบบเป็นรูปแบบการสร้างวัตถุใหม่ที่สร้างขึ้นโดยการคัดลอกวัตถุที่มีอยู่

บทความนี้กล่าวถึงวิธีการสร้างวัตถุใหม่จากวัตถุที่มีอยู่โดยใช้รูปแบบต้นแบบ

มันคืออะไร?

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

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

แผนภาพคลาส

แผนภาพชั้นเรียนประกอบด้วยเอนทิตีต่อไปนี้:

  • ต้นแบบ
  • ต้นแบบคอนกรีต
  • ลูกค้า

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

ขั้นแรก เราสร้างอินเทอร์เฟซ

คลาส F-16 ใช้อินเทอร์เฟซดังนี้:

ลูกค้าสามารถใช้รูปแบบดังนี้:

โปรดทราบว่าวิธีการโคลนของ อิน เท อร์เฟซ IAircraftPrototypeส่งคืนประเภทนามธรรม ลูกค้าไม่ทราบว่าการใช้งานที่แตกต่างกันของอินเทอร์เฟซเดียวกันจะสร้างคลาสย่อยที่เป็นรูปธรรมได้อย่างไร ตัวอย่างเช่นสามารถส่งผ่านคลาสของBoeing747 ได้ โดยสร้างสำเนาของต้นแบบอะไรก็ตามที่ส่งผ่านเข้ามา (F16 หรือ Boeing747) รูปแบบต้นแบบช่วยลดการจัดคลาสย่อย เนื่องจากพฤติกรรมของวัตถุต้นแบบสามารถเปลี่ยนแปลงได้โดยการประกอบเข้ากับส่วนย่อย

สำเนาตื้นเทียบกับสำเนาลึก

รูปแบบต้นแบบต้องการคลาสต้นแบบหรืออินเทอร์เฟซเพื่อใช้เมธอดclone () การโคลนสามารถทำได้ทั้งแบบตื้นและลึก ตัวอย่างเช่น หากคลาส F-16 ของเรา มีออบเจกต์สมาชิกประเภทF16Engineในการคัดลอกแบบตื้น วัตถุที่โคลนจะชี้ไปที่ ออบเจ็กต์ F16Engine เดียวกัน กับต้นแบบ แต่ในการคัดลอกแบบลึก วัตถุที่ถูกโคลนจะได้รับสำเนาของวัตถุเครื่องยนต์และวัตถุใดๆ ที่ซ้อนอยู่ภายใน จะไม่มีการแบ่งปันฟิลด์ใดๆ — ซ้อนกันหรืออื่นๆ — ระหว่างต้นแบบและตัวโคลน

กำลังโหลดแบบไดนามิก

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

ตัวอย่างอื่นๆ

ในภาษาโปรแกรม Java คลาส Object มีวิธีการโคลน คลาสใช้อินเตอร์เฟสjava.lang.Cloneable

คำเตือน

การใช้ วิธี โคลนอาจเป็นเรื่องยากเนื่องจากการอ้างอิงแบบวงกลม

บทความอื่นๆ ในชุด รูปแบบสร้างสรรค์