Corak reka bentuk prototaip menawarkan cara yang kuat untuk membuat objek baru dengan mengkloning yang sedia ada, mengelakkan overhead instantiation langsung. Ini amat bermanfaat apabila penciptaan objek adalah sumber yang berintensifkan.
Kes penggunaan yang ideal:
corak prototaip bersinar apabila:
Corak bergantung pada dua komponen utama:
Clone()
Clone()
Dalam pembangunan permainan, penciptaan watak sering melibatkan menentukan jenis watak asas (pahlawan, mage, dan lain -lain) dan kemudian menyesuaikan watak pemain individu. Corak prototaip dengan elegan mengendalikan ini:
pelaksanaan
output
<code class="language-go">package prototype import "fmt" // Prototype interface type Prototype interface { Clone() Prototype GetDetails() string } // Concrete Prototype: GameCharacter type GameCharacter struct { Name string Class string Level int Health int Stamina int Weapon string Armor string Speciality string } // Clone method for GameCharacter func (c *GameCharacter) Clone() Prototype { return &GameCharacter{ Name: c.Name, Class: c.Class, Level: c.Level, Health: c.Health, Stamina: c.Stamina, Weapon: c.Weapon, Armor: c.Armor, Speciality: c.Speciality, } } // GetDetails method for GameCharacter func (c *GameCharacter) GetDetails() string { return fmt.Sprintf("Name: %s, Class: %s, Level: %d, Health: %d, Stamina: %d, Weapon: %s, Armor: %s, Speciality: %s", c.Name, c.Class, c.Level, c.Health, c.Stamina, c.Weapon, c.Armor, c.Speciality) }</code>
<code class="language-go">package main import ( "example.com/prototype" "fmt" ) func main() { // Warrior template warrior := &prototype.GameCharacter{ Name: "Base Warrior", Class: "Warrior", Level: 1, Health: 100, Stamina: 50, Weapon: "Sword", Armor: "Steel Armor", Speciality: "Melee Combat", } // Clone and customize for players player1 := warrior.Clone().(*prototype.GameCharacter) player1.Name = "Arthas" player1.Level = 10 player1.Weapon = "Frostmourne" player2 := warrior.Clone().(*prototype.GameCharacter) player2.Name = "Leonidas" player2.Level = 8 player2.Weapon = "Spear" player2.Armor = "Golden Armor" // Output character details fmt.Println("Template:", warrior.GetDetails()) fmt.Println("Player 1:", player1.GetDetails()) fmt.Println("Player 2:", player2.GetDetails()) }</code>
<code>Template: Name: Base Warrior, Class: Warrior, Level: 1, Health: 100, Stamina: 50, Weapon: Sword, Armor: Steel Armor, Speciality: Melee Combat Player 1: Name: Arthas, Class: Warrior, Level: 10, Health: 100, Stamina: 50, Weapon: Frostmourne, Armor: Steel Armor, Speciality: Melee Combat Player 2: Name: Leonidas, Class: Warrior, Level: 8, Health: 100, Stamina: 50, Weapon: Spear, Armor: Golden Armor, Speciality: Melee Combat</code>
Duplikasi yang dikurangkan: objek asas yang boleh diguna semula meminimumkan kod berlebihan.
Deep vs. Copy Copy: Pengendalian objek bersarang yang betul adalah penting untuk mengelakkan pengubahsuaian yang tidak diingini.
Atas ialah kandungan terperinci Corak reka bentuk prototaip dijelaskan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!