デザインパターンの一つ、Prototypeパターンを勉強してみました。
今回はQtとC++を使って、不思議なGUIアプリを作ってみました。

Templateパターンと似ているけど、Prototypeパターンはインスタンスを量産する感じで、Templateパターンは、インスタンス生成の過程が保証されるという感じかなあ・・・
Prototypeパターンとは
インスタンスを原型から簡単に量産できるパターンかなと思いました。
例えば、とても手の込んだステッカーを作らなくてはいけないとなった場合、1枚作ってそれをコピペする要領で量産できると嬉しいですよね。
クラス図

Prototypeクラスをinterfaceにして、Prototypeクラスではインスタンスを返すような実装をすればよいです。
作成したアプリ
ステッカー1枚を作成して、それを10枚プロトタイプパターンを作って複製するアプリを作りました。
コードと実行結果

星を作るボタンを押すと、星ステッカーを1枚作成し、1枚作成する過程にグリッターを振るという3秒かかる作業が挟まります。なので、ボタンを押してからしばらく待ちます。
これを10枚すべて一から作ると、表示するのに30秒かかりますが、プロトタイプパターンを使用することで、
最初の3秒1回だけで済んでいます。
コードを分解
では、各クラスの説明をしていきます。
mainwindow.h / mainwindow.cpp
ここでは、UI部分の実装やロジックを入れています。
sticker.h / sticker.cpp
setAddons関数で、addonとしてグリッターを付与します。
そしてcreateClone関数で、Stickerのインスタンスを返します。
ここで生成されるインスタンスに、名前や付与されたaddonなども登録していきます。
こうすることで、createClone関数を呼び出すだけで、簡単にプロトタイプが生成できますね。
どういう時に使うのか?
同じものを量産しなくてはいけない時とかに使うと良いパターンなのかなと思います。
ゲームでいうならば、同じ武器を量産しなくてはいけないとき、、とか?弾丸とか・・・
まとめ
Prototypeパターンのアプリを作成してまとめてみました。
一つのものを量産しなくてはいけないときに使えるパターンだと覚えておきたいと思います。
他のデザインパターンについてはこちらをご覧ください。
参考サイト

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

にほんブログ村
コメント