> For the complete documentation index, see [llms.txt](https://kashiwara.gitbook.io/rubydesurufurusukuratchibe/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kashiwara.gitbook.io/rubydesurufurusukuratchibe/rifakutaringu/gamemanagerfactoryclassno.md).

# GameManagerFactoryClassの実装

GameManagerを生成するGameManagerFactoryClassを実装していきます。

## Factoryクラスって何？

複雑なオブジェクトを生成する時にはデザインパターンの1つであるFactoryパターンが使えます。

Factoryパターンを使うことにより、可読性と保守性を向上させていきましょう。

{% embed url="<https://morizyun.github.io/ruby/design-pattern-factory-method.html>" %}

## GameManagerFactoryClassの実装

GameManagerFactoryClassを実装して複雑なGameオブジェクトの生成責務を持ってもらいます。

game\_factory.rbを作成してください。

```ruby
# frozen_string_literal: true

require_relative "const"
require_relative "game_manager"
require_relative "player"
require_relative "board"

# GameManagerクラスを作成する
class GameManagerFactory
  class << self
    # 概要: GameManagerクラスを作成し返却する
    # 引数: なし
    # 戻り値: GameManegerクラスのインスタンス
    def create
      board = Board.new([
                          [OPEN_SLOT, OPEN_SLOT, OPEN_SLOT],
                          [OPEN_SLOT, OPEN_SLOT, OPEN_SLOT],
                          [OPEN_SLOT, OPEN_SLOT, OPEN_SLOT]
                        ])

      GameManager.new(player1: Player.new(piece: PLAYER1_PIECE), player2: Player.new(piece: PLAYER2_PIECE), board: board)
    end
  end
end

```

以下のように呼び出すことによってGameオブジェクトを作成できるようになりました。

```ruby
game = GameManagerFactory.create
```

このクラスを用いて、次のセクションでTicTacToeクラスを実装したいと思います。
