Factory Methodパターンを使って簡単なアプリを作ってみた

factory-method-e プログラミング

※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

デザインパターンの一つ、Factory Methodパターンを勉強してみました。

今回はQtとC++を使って、不思議なGUIアプリを作ってみました。

Template Methodパターンを理解してからの方がいいかも?

Factory Methodパターンとは

インスタンスの生成をサブクラスで行うことで、柔軟にインスタンスの生成をすることができます。

もっと言えば、このパターンを使用することで、クラスの再利用性を高めることができます。

クラス図

factory-method-diagram
Factory Methodパターン https://ja.wikipedia.org/wiki/Factory_Method_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

Template Methodパターンで解説したたい焼き機の例で説明をしてみます。

Creatorたい焼き機クラス
Productたい焼き
ConcreteCreator具象たい焼き機クラス
ConcreteProduct具象たい焼き

Template Methodパターンでは、たい焼き機クラスが一連のレシピを呼び出してくれて、具象たい焼き機クラスで一連のレシピをオーバーライドしていました。

Factory Methodパターンでは、それにもう少し自由度を与えた感じです。

例えば、全国各地にたい焼き機クラスを継承した具象たい焼き機クラスが点在するとします。

今までのTemplate Methodパターンでは、たい焼きを作る最初の大事な工程はたい焼き機クラスで定義されていました。

しかし、この重要な最初の工程を責任をもって自分の店舗でやりたい!という店舗がでてきました。

そうなったとき、この生地の作成を各具象たい焼き機クラスで決定していいよ、ということができるようになったのが、Factory Methodパターンです。

うーん、、我ながら分かりづらい・・。

つまり何が言いたいかというと、一番大事なインスタンス作成をサブクラスに任せるパターンなんですよね。

作成したアプリ

Template Methodパターンで作成したアプリで、スープを入れる器をサブクラスで作成できるようにしました。

コードと実行結果

factory-method-app
実行結果
GitHub - jiji-thecat/dp-factory-method
Contribute to jiji-thecat/dp-factory-method development by creating an account on GitHub.

左のうさぎから、以下のようなテーブルとなっています。

うさぎクマ
大豆ミートさかな鹿肉
野菜にんじんわかめキャベツ
スープストックコンソメあごだしはちみつ
お皿ミルクパンお皿

器の行が追加されました。Catクラスでは、インスタンス作成をサブクラスで担当し、うさぎとクマはスーパークラスで担当しています。

コードを分解

では、各クラスの説明をしていきます。Template Methodパターンとほとんど一緒なので、差分だけ紹介します。

cook.h / cook.cpp

クラス図でいうCreatorクラスの役割をします。

createBowl関数で、インスタンス生成を担当します。

cat.h / cat.cpp

クラス図でいう、ConcreteCreatorの役割をします。

createBowl関数をオーバーライドして、器のインスタンスをMilkPanクラスで生成しています。

どういう時に使うのか?

使いどきはいまいちあまりしっくりきてません。

Template Methodパターンを使うときに、ふと頭の隅に置いておくといいのかもしれません。

でもFactoryクラスってよく業務で見かける

まとめ

Factory Methodパターンをアプリ作成してまとめてみました。

使いどきは、いまいちしっくりきていませんが、Factoryって業務で何回か見かけたことのあるワードなので、

最低限サブクラスでインスタンス生成を担当するパターンというのを覚えておきたいと思います!

参考サイト

にほんブログ村に参加しております!よろしければクリックお願いします 🙂

にほんブログ村 IT技術ブログへ
にほんブログ村

コメント

タイトルとURLをコピーしました