2. ファクトリーパターン (Factory)
オブジェクトの生成を工場に委任して結合度を下げるファクトリーパターンについて学びましょう。
ファクトリーパターン (Factory Pattern)
ファクトリーパターンは、オブジェクトを生成する仕事を専担する工場(クラスやメソッド)を別に設けるパターンですね。このようにすると、条件によって異なるオブジェクトを生成しなければならない時、使う側のコードを修正しなくても工場の内部だけ修正すれば良いので、メンテナンスがとても楽になりますよ!
カナデでは、インターフェースと静的メソッドを活用してファクトリーパターンをすっきりと実装できます。
(参考:動物が共通で持つ行動をインターフェースとして規定します)
【動物】を規定しよう:
〈鳴く〉がなければならない()
(参考:インターフェースに従う実装体を作ります)
【動物】に従う【犬】を設計しよう:
〈鳴く〉を作ろう():
「ワンワン!尻尾を振ります。」を出力しよう
【動物】に従う【猫】を設計しよう:
〈鳴く〉を作ろう():
「ニャー!香箱座りをします。」を出力しよう
(参考:文字列を受け取って適切な動物を作り出す工場です)
【動物工場】を設計しよう:
【動物】を返す『私たち』の〈お迎えする〉を作ろう(【文字列】の『種類』):
もし(『種類』と「犬」が同じだ)ならば:
新しい【犬】()を返そう
もしくは(『種類』と「猫」が同じだ)ならば:
新しい【猫】()を返そう
「分からない動物です!」を出力しよう
空っぽを返そう
(参考:ファクトリーを通してオブジェクトを生成し、インターフェースで同じように扱います)
『私のペット』を【動物工場】の〈お迎えする〉(「猫」)にしよう
『私のペット』の〈鳴く〉()を実行しよう
『友達のペット』を【動物工場】の〈お迎えする〉(「犬」)にしよう
『友達のペット』の〈鳴く〉()を実行しよう