【Go】簡単なFactoryパターンのサンプルコード
更新日:2025/3/13/(木) 12:38
タグ:Go、デザインパターン
概要
Goで簡単Factoryパターンを実装。
内容はポケモンをFactoryパターンを用いて生成するもの。
サンプルコード
package main // IPokemon インターフェース: ポケモンの基本的な振る舞いを定義 type IPokemon interface { setName(name string) setAttack(attack string) getAttack() string getName() string } // Pokemon 構造体: ポケモンの共通のプロパティを保持 type Pokemon struct { name string attack string } // setName: ポケモンの名前を設定 func (p *Pokemon) setName(name string) { p.name = name } // setAttack: ポケモンの攻撃技を設定 func (p *Pokemon) setAttack(attack string) { p.attack = attack } // getAttack: ポケモンの攻撃技を取得 func (p *Pokemon) getAttack() string { return p.attack } // getName: ポケモンの名前を取得 func (p *Pokemon) getName() string { return p.name } // Pikachu 構造体: ポケモンの一種 (ピカチュウ) type Pikachu struct { Pokemon } // NewPikachu: ピカチュウを生成するファクトリーメソッド func NewPikachu() IPokemon { return &Pikachu{ Pokemon: Pokemon{ name: "ピカチュウ", attack: "電気ショック", }, } } // Eevee 構造体: ポケモンの一種 (イーブイ) type Eevee struct { Pokemon } // NewEevee: イーブイを生成するファクトリーメソッド func NewEevee() IPokemon { return &Eevee{ Pokemon: Pokemon{ name: "イーブイ", attack: "たいあたり", }, } } // GetPokemon: ポケモンの名前を指定してインスタンスを取得 func GetPokemon(name string) IPokemon { switch name { case "ピカチュウ": return NewPikachu() case "イーブイ": return NewEevee() default: return nil } } func main() { pikachu := GetPokemon("ピカチュウ") eevee := GetPokemon("イーブイ") // 生成したポケモンの名前と技を出力 println(pikachu.getName(), "の技: ", pikachu.getAttack()) println(eevee.getName(), "の技: ", eevee.getAttack()) } // 出力 // ピカチュウ の技: 電気ショック // イーブイ の技: たいあたり