ホームページ >Java >&#&チュートリアル >プロトタイプのデザインパターンの説明
プロトタイプ設計パターンは、既存のオブジェクトをクローン化し、直接インスタンスのオーバーヘッドを避けることにより、新しいオブジェクトを作成する強力な方法を提供します。 これは、オブジェクトの作成がリソース集約型である場合に特に有益です。
理想的なユースケース:
プロトタイプパターンは、次の場合に輝きます
パターンは、2つの重要なコンポーネントにかかっています:
プロトタイプインターフェイス:
オブジェクトの複製のメソッドを定義する一般的なインターフェイス。Clone()
パターンを示すクラス図:Clone()
ゲーム開発では、キャラクターの作成には、多くの場合、ベースのキャラクタータイプ(Warrior、Mageなど)を定義し、個々のプレイヤーキャラクターをカスタマイズすることが含まれます。 プロトタイプパターンは、これをエレガントに処理します:
実装
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>再利用可能なベースオブジェクトは、冗長コードを最小限に抑えます
パフォーマンスの向上:クローニングは、繰り返されるオブジェクトの構築よりも速いです。
すべてのクローン可能なオブジェクトは、プロトタイプインターフェイスを実装する必要があります。
結論:以上がプロトタイプのデザインパターンの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。