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

dp-strategy-e プログラミング

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

デザインパターンの一つ、StrategyパターンをQtとC++を使って勉強してみました。

実際にアプリを作ってみることで、パターンの使い方を学びたいと思います。

結構わかりやすい、使いやすいパターンだとおもいます!

Strategyパターンとは

アルゴリズムを一つの関数にまとめて書いてしまうより、別クラスに分けることで

プログラミングの可読性を高め、メンテナンス性を高めることができます。

クラス図

strategy-diagram
https://ja.wikipedia.org/wiki/Strategy_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

アルゴリズムインタフェースを、ConcreteStrategyの方で継承できるようにします。

こうすることで、アルゴリズムの入れ替えが簡単にできたり、見た目が綺麗におさまります。

作成したアプリ

牛丼チェーン2種類の牛丼を比較するアプリです。

毎度しょうもないです・・・

コードと実行結果

strategy-gif
実行結果

各ボタンは左から、肉の枚数、玉ねぎの枚数、紅生姜の枚数を比較します。

そして、多い方の牛丼が表示されます。同じ量の場合は、2つ表示されます。

GitHub - jiji-thecat/dp-bridge
Contribute to jiji-thecat/dp-bridge development by creating an account on GitHub.

コードを分解

では、各クラスの説明をしていきます。

mainwindow.h / mainwindow.cpp

ここでは、UI部分の実装やロジックを入れています。

gyudon.h / gyudon.cpp

牛丼クラスです。

肉、玉ねぎ、紅生姜の数を持ちます。

comparator.h / comparator.cpp

クラス図でいう、Strategyクラスになります。

compareというアルゴリズムを、ConcreteStrategyの方でも持つようにします。

meat-comparator.h / meat-comparator.cpp

クラス図でいう、ConcreteStrategyクラスになります。

ここでは、肉の枚数を比較し、数によって数値を返します。

どういう時に使うのか?

こちらは、仕事でも使えることが多そうなパターンかなと思いました。

わりとアルゴリズムは、一つの関数の中にだーっと大量に書いちゃうことが多いのですが、

このように、簡単にクラスに分けれる場合は、そうして書いた方が見やすいし、メンテしやすいです。

今までのパターンのなかでは、使い道がわりとイメージしやすいかも

まとめ

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

アルゴリズムを一つの関数にベタ書きしちゃいそうな場合などは、こちらのパターンを活用した方がいいのかなと思いました。

他のデザインパターンについてはこちらをご覧ください。

参考サイト

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

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

コメント

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