Python 100Days Challenge Day19
ファクトリーメソッドは、オブジェクト(プログラムの中で使う道具やデータのかたまり)を作るための特別な方法。
この方法を使うと、どうやってそのオブジェクトを作るかを決めることができる。
ファクトリーメソッドのメリット
- 簡単に新しい種類のオブジェクトを追加できる
- 既存コードをあまり変更せずに済む
- コードが読みやすくなる
- オブジェクトを作る部分を1つにまとめるので、どこで何をしているかがわかりやすくなる
では、「ケーキを作る」というプログラムを書く例で解説してみる。
ファクトリーメソッドを使わない書き方
もしファクトリーメソッドを使わずケーキを作る場合はこう書ける。
class Cake:
def __init__(self, type):
self.type = type
cake1 = Cake("チョコレートケーキ")
cake2 = Cake("チーズケーキ")
確かにケーキは作れるけど、新しい種類のケーキを作るには毎回ケーキの作り方を変更する必要が出てくる。
ファクトリーメソッドを使う書き方
ファクトリーメソッドを使うとケーキの作り方は柔軟に変えられる。
class CakeFactory:
def create_cake(self, type):
if type == "チョコレートケーキ":
return ChocolateCake()
elif type == "チーズケーキ":
return CheeseCake()
else:
return None
class ChocolateCake:
def __init__(self):
self.type = "チョコレートケーキ"
class CheeseCake:
def __init__(self):
self.type = "チーズケーキ"
factory = CakeFactory()
cake1 = factory.create_cake("チョコレートケーキ")
cake2 = factory.create_cake("チーズケーキ")
こう書くとケーキを作る方法create_cake(self, type):
をclass CakeFactory
にまとめることができる。
単一責任の原則
ファクトリーメソッドを使う理由は関数が1つのタスクにだけ集中するようにするため
- 例えば、ケーキを作る関数はケーキを作ることだけをすべき
- オブジェクトを作る(ケーキを作る)ことはとても複雑なので、この部分は別の関数にわけておくと便利
関心分離の原則
プログラムの分かりやすさを保つため
- もしオブジェクトを作るのにたくさんのコードが必要だとしても、オブジェクトを使う側(例えば、ケーキを食べる側)はその複雑さを知らなくていい
- オブジェクトを使う側は、オブジェクトをどうやって作るかではなく、何ができるかに集中すべき