【Goで学ぶデザインパターン】Factory Methodとは

Factory Methodとは

Factory Method(ファクトリメソッド)は、オブジェクト指向デザインパターンの一つで、オブジェクトの生成のためのインターフェースを定義するものです。

このパターンのコアは、インスタンスを作成する責任をサブクラスに委譲することです。これにより、クライアントは具体的なクラスを知ることなく、オブジェクトを作成することができるようになります。

Factory Methodの実装例

以下はGolangでのFactory Methodの実装例です。

package main

import "fmt"

// Animalインターフェース
type Animal interface {
	Speak() string
}

type Dog struct{}

func (d *Dog) Speak() string {
	return "Woof!"
}

type Cat struct{}

func (c *Cat) Speak() string {
	return "Meow!"
}

// AnimalFactoryインターフェース
type AnimalFactory interface {
	CreateAnimal() Animal
}

type DogFactory struct{}

func (df *DogFactory) CreateAnimal() Animal {
	return &Dog{}
}

type CatFactory struct{}

func (cf *CatFactory) CreateAnimal() Animal {
	return &Cat{}
}

func main() {
	var factory AnimalFactory

	// DogFactoryを使う
	factory = &DogFactory{}
	dog := factory.CreateAnimal()
	fmt.Println(dog.Speak()) // Woof!

	// CatFactoryを使う
	factory = &CatFactory{}
	cat := factory.CreateAnimal()
	fmt.Println(cat.Speak()) // Meow!
}

動物の鳴き声を表現する例:

  1. Animal インターフェースがあり、Speak() メソッドを持っています。
  2. DogCat の2つの具体的な動物が Animal インターフェースを実装します。
  3. AnimalFactory インターフェースが CreateAnimal() メソッドを持ち、動物を作成します。
  4. 具体的なファクトリ、DogFactoryCatFactoryAnimalFactory インターフェースを実装します。



Factory Methodが使われる具体的なケース

  1. データベース接続: アプリケーションが異なるデータベースシステム(MySQL, PostgreSQL, SQLiteなど)と接続する必要がある場合、Factory Methodを使って適切なデータベース接続を生成することができます。
  2. ユーザーロールに基づく表示: システムにはさまざまなユーザーロール(例: 管理者、エンドユーザー、ゲストなど)が存在する場合、これらのロールに応じて異なるダッシュボードやページのビューを提供することが考えられます。Factory Methodはロールに基づいて適切なビューオブジェクトを生成します。
  3. デバイスやブラウザの違いを考慮したレンダリング: ユーザーが使用しているデバイス(デスクトップ、モバイル、タブレット)やブラウザ(Chrome、Firefox、Safari)に応じて、異なるレンダリングや動作が必要な場合、Factory Methodで適切なレンダリングエンジンやビューコンポーネントを生成します。

このように、Factory Methodは異なる実装や状況に応じて特定のオブジェクトを生成する必要があるときに特に有用です。

デザインパターン: Factory Methodが学べる教材

動画教材

技術書籍

-Golang
-