kakke18’s blog

ゆるふわ学生エンジニア

Factory Method-インスタンス作成をサブクラスにまかせる-

Java言語で学ぶデザインパターン入門 の第4章を参考にしました。

Factory Methodパターンとは

本書には以下のように記載されています。

インスタンス生成のための枠組みをスーパークラス側で定め、実装はサブクラスが行う

つまり、前回の記事のTemplate Methodパターンの処理の枠組みにおいて、 インスタンス生成を組み込んだものです。 'factory'は、日本語で'工場'という意味があります。 スーパークラスが'工場'の役割を果たし、そこからサブクラスが生成されるというイメージです。

Factory Methodパターンの登場人物

実装

こちらを参考にしてください。

Factory Methodパターンを使う場合

大まかな処理は以下のような形になります。

Factory factory = new IDCardFactory();
Product card1 = factory.create("結城浩");
Product card2 = factory.create("とむら");
Product card3 = factory.create("佐藤花子");
card1.use();
card2.use();
card3.use();

Factory Methodパターンを使わない場合

これと同等の処理を素直にJavaで書くとこうなると思います。 この変更を行うには、IDCardコンストラクタをpublicに変更する必要があります。

Product card1 = new IDCard("結城浩");
Product card2 = new IDCard("とむら");
Product card3 = new IDCard("佐藤花子");
card1.use();
card2.use();
card3.use();

Factory Methodパターンを使うメリット

上の2つを見比べると「Factory Methodパターン使わない方が楽なんじゃね...」となるかもしれません。 確かにこの処理を動かすためだけには、Factory Methodパターンを使わない方が楽だと思います。 しかし、Factory Methodには、mainクラスを具体的なクラス名による束縛から解放する というメリットがあります。

Factory Methodパターンの特徴は、Mainクラスにおいて、new演算子によるインスタンス生成を行わずに メソッド呼び出しに置き換えていることです。 これにより、Mainクラスは具体的なクラス(IDCardクラス)を知らずともインスタンス生成をすることが可能となります。

まとめ

インスタンス生成役とインスタンスの中身の実装役に分けているのがFactory Methodパターン。

Solidityでスマートコントラクトの構築を学習できる、CryptoZombiesはこのデザインパターンを用いてますね。