📖
Factory Methodをざっくり理解してみる
Daily Blogging87日目
デザインパターン難しい
その中の1つであるFactory Methodについてざっくり整理してみる
Factory Methodとは
Factory Methodとは、オブジェクトの生成ロジックをカプセル化したメソッドのこと
工場のように完成品(オブジェクト)を提供することからその名がついてる。
Factory Method(ファクトリー・メソッド)は、生成に関するデザインパターンの一つで、スーパークラスでオブジェクトを作成するためのインターフェースが決まっています。しかし、サブクラスでは作成されるオブジェクトの型を変更することができます。
メリット
オブジェクトの生成ロジックを一箇所にまとめることができて、下記を向上させられる
- 再利用性
- 保守性
また、呼び出し側は詳細な生成ロジックを知らなくても、適切なオブジェクトを取得できるという利点もある。
例
大福工場を例にして考えてみる。
その工場ではいろんな大福を生産してる
いちご大福とかよもぎ大福とか
いちご大福を食べたいユーザがその大福工場に対して「いちご大福をください」と注文すると、
大福工場はその注文を受け取るだけでいちご大福の生産を始める。
いちご大福に必要な材料を用意して、決められた工程を順番にこなしていちご大福が完成。
出来上がった大福をユーザにお届けしてくれます。
この時、ユーザは必要な材料も工程も何も知りませんが、注文方法だけは知ってた。
注文の仕方を知っているだけでいちご大福を手に入れることができる。
コードに落とし込んでみる
こんな感じ
# 大福のスーパークラス
# 大福を作るためのメソッドを持っている
class Daifuku
def prepare
raise NotImplementedError, "Subclasses must implement the prepare method"
end
end
# いちご大福クラス
# 大福クラスを継承することで、大福に関するインターフェースを持つ
class IchigoDaifuku < Daifuku
def prepare
# いちご大福の材料集める
# 材料をもとに必要な工程を順番に実施する
end
end
# よもぎ大福クラス
# 大福クラスを継承することで、大福に関するインターフェースを持つ
class YomogiDaifuku < Daifuku
def prepare
# よもぎ大福の材料集める
# 材料をもとに必要な工程を順番に実施する
end
end
# 大福ファクトリーのスーパークラス
class DaifukuFactory
def create
daifuku = create_daifuku
daifuku.prepare
daifuku
end
def create_daifuku
raise NotImplementedError, "Subclasses must implement the create_daifuku method"
end
end
# いちご大福ファクトリー
class IchigoDaifukuFactory < DaifukuFactory
def create_daifuku
IchigoDaifuku.new
end
end
# よもぎ大福ファクトリー
class YomogiDaifukuFactory < DaifukuFactory
def create_daifuku
YomogiDaifuku.new
end
end
# ファクトリーメソッドを使って大福を作成
ichigo_factory = IchigoDaifukuFactory.new
ichigo = ichigo_factory.create
いちご大福クラスもよもぎ大福クラスも同じ大福インターフェースを持っているので、
大福ファクトリークラスで同じ呼び出し方ができる
大福を注文するときは、詳細なロジックを知らなくても大福ファクトリークラスに注文するだけで簡単にほしい大福が手に入る
Discussion