デザインパターンの一つ、StrategyパターンをQtとC++を使って勉強してみました。
実際にアプリを作ってみることで、パターンの使い方を学びたいと思います。
結構わかりやすい、使いやすいパターンだとおもいます!
Strategyパターンとは
アルゴリズムを一つの関数にまとめて書いてしまうより、別クラスに分けることで
プログラミングの可読性を高め、メンテナンス性を高めることができます。
クラス図
アルゴリズムインタフェースを、ConcreteStrategy
の方で継承できるようにします。
こうすることで、アルゴリズムの入れ替えが簡単にできたり、見た目が綺麗におさまります。
作成したアプリ
牛丼チェーン2種類の牛丼を比較するアプリです。
毎度しょうもないです・・・
コードと実行結果
各ボタンは左から、肉の枚数、玉ねぎの枚数、紅生姜の枚数を比較します。
そして、多い方の牛丼が表示されます。同じ量の場合は、2つ表示されます。
コードを分解
では、各クラスの説明をしていきます。
mainwindow.h / mainwindow.cpp
ここでは、UI部分の実装やロジックを入れています。
gyudon.h / gyudon.cpp
牛丼クラスです。
肉、玉ねぎ、紅生姜の数を持ちます。
comparator.h / comparator.cpp
クラス図でいう、Strategy
クラスになります。
compare
というアルゴリズムを、ConcreteStrategy
の方でも持つようにします。
meat-comparator.h / meat-comparator.cpp
クラス図でいう、ConcreteStrategy
クラスになります。
ここでは、肉の枚数を比較し、数によって数値を返します。
どういう時に使うのか?
こちらは、仕事でも使えることが多そうなパターンかなと思いました。
わりとアルゴリズムは、一つの関数の中にだーっと大量に書いちゃうことが多いのですが、
このように、簡単にクラスに分けれる場合は、そうして書いた方が見やすいし、メンテしやすいです。
今までのパターンのなかでは、使い道がわりとイメージしやすいかも
まとめ
Strategyパターンのアプリを作成してまとめてみました。
アルゴリズムを一つの関数にベタ書きしちゃいそうな場合などは、こちらのパターンを活用した方がいいのかなと思いました。
他のデザインパターンについてはこちらをご覧ください。
参考サイト
にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村
コメント