デザインパターンの一つ、BuilderパターンをQtとC++を使って勉強してみました。
実際にアプリを作ってみることで、パターンの使い方を学びたいと思います。
Builderとは、建築者、建築業者を意味する
Builderパターンとは
Builderとは、建築者を意味します。なので、こちらのパターンは建築物を作る工程をイメージするとわかりやすいです。
例えば一軒家を建てる場合、建築工程などはある程度決まっています。
しかし、木の家、コンクリートの家、お菓子の家、など生成物はバリエーションのあるものを作りたいことがあるかもしれません。
このような、ある作業工程からさまざまなバリエーションの成果物を生成したい時にとても役立つパターンになります。
クラス図
一軒家の作業工程を持つのがDirector
クラス。
木の家、コンクリートの家、お菓子の家などはBuilderクラスを継承したConcreteBuilder
クラスで実装します。
こうすることで、Director
はいろんなバリエーションのBuilder
クラスに適応でき、いろんなバリエーションの家を作り出すことができるのです。
作成したアプリ
生命体から、ネコや宇宙人を生成するアプリを作成しました。
しょうもないです。
コードと実行結果
ボタンを押すことで、ネコと宇宙人を作り出すようになっており、Builderパターンに倣うようにしました。
Director
は、生命体を作る工程を持っており、ConcreteBuilder
はネコ、宇宙人の素材を持っています。
コードを分解
では、各クラスの説明をしていきます。
mainwindow.h / mainwindow.cpp
ここでは、UI部分の実装やロジックを入れています。
director.h / director.cpp
目や鼻や耳などをつける関数をBuilderクラスから呼び出し、assemble
関数で生命体を生成する作業を実行します。
builder.h / builder.cpp
ネコや宇宙人クラスなどが継承する抽象クラスになります。
このクラスを継承するクラスは、目や鼻を付与する関数を実装しなくてはいけません。
creature.h / creature.cpp
生命体のクラスになります。目や鼻などのメンバ変数を持ちます。
cat-builder.h / cat-builder.cpp
ネコを生成するクラスになります。
どういう時に使うのか?
作業工程が決まっているが、いろんなバリエーションの生成を行いたい時に使えるのかな〜・・・
ロジックはわかるけど、いざどういうときに使用するかがやっぱりまだ難しい
まとめ
Builderパターンのアプリを作成してまとめてみました。
作業工程が決まっているものにたいして、いろいろなバリエーションのものを生成したいときなどは、このパターンを参考にしたいと思います。
他のデザインパターンについてはこちらをご覧ください。
参考サイト
にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村
コメント