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

e-adapter プログラミング

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

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

今回はQtとC++を使って、簡単な(無意味な)GUIアプリを作ってみました。

Adapterパターンを活用できていない気がするアプリを作ってしまった・・

Adapterパターンとは

Adapterパターンとは適合させるという意味をもちますが、お互いに関連のないクラス同士のふるまいを合わせたい時などに使うようです。

例えば、猫クラスとイルカクラスがあるとします。

猫クラスには鳴き声関数がありますが、イルカクラスは鳴き声関数はありません。ただし、鳴き声関数に似た超音波関数を持つとします。

超音波関数も、ある種鳴き声だし、どちらのクラスからも鳴き声関数を呼んだら何かしら返事をしてほしいと期待します。

そこで、Adapterクラスというインタフェースを作成し、鳴き声クラスを仮想関数として定義します。

そして新たにイルカAdapterクラスを実装し、イルカクラスとAdapterクラスを継承し、鳴き声関数にはイルカクラスの超音波関数を呼び出すとします。

こうすることで、猫クラス、イルカAdapterクラスから、鳴き声関数を呼び出すことができることとなりました。

このように、イルカクラスは猫クラスと互いに関連がありませんが(同じ生物という括りでは一緒だけど)、Adapterクラスでふるまいを無理やり合わせることができます。

クラス図

adapter-diagramm
Adapterパターン https://ja.wikipedia.org/wiki/Adapter_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

先ほどの例を上記の図に置き換えると、イルカAdapterクラスが、Adapterクラスとなり、イルカクラスがAdapteeクラス、そしてAdapterインタフェースがTargetとなります。

作成したアプリ

人間クラスと宇宙人クラスをそれぞれ呼び出し、日本語で話しかけたら宇宙人も片言の日本語で返事をしてくれるようなアプリとしました。

人間と宇宙人はどちらも生命体という括りでは一緒ですが、言語が違うということで、そこをAdapterを使ってふるまいを合わせるといったことにしてみました。

コードと実行結果

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

作ってる最中、これでいいのかよくわからなくなってきたが、、、

コードを分解

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

mainwindow.h / mainwindow.cpp

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

human.h / human.cpp

Humanクラスを定義しています。Humanクラスには、こんにちはと返すsayHello関数が実装されています。

alien.h / alien.cpp

Alienクラスを定義しています。Alienクラスにも、宇宙人語でコンニチハと返すsayHelloWithALienLanguage関数が実装されています。

friendly-interface.h / friendly-interface.cpp

仲良く振る舞えるようになるインタフェースクラスとなります。ここでは、仲良くなることで、sayHello 関数が使えるようになります。

alien-adapter.h / alien-adapter.cpp

Alienクラスを継承し、FriendlyInterfaceクラスをインタフェースとして実装するクラスです。

つまり、宇宙人と仲良くなれた結果、このクラスを使えるようになり、sayHello関数を呼び出すと、宇宙人語でコンニチハと返してくれるようになります。

どういう時に使うのか?

振る舞いの違うクラスを無理やり変えたい場合などにAdapterパターンを使うと良いのかもしれないですね。

元のクラスを書き換えるとなると、膨大にある場合は大変だったりするので、付け加えて調整して直していくって感じでしょうか。

これはわりと業務でも使うかも?

まとめ

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

使いどきは、関連性のないクラス同士の組み合わせで振る舞いを合わせたい場合、こちらのパターンが使えるのではないでしょうか。

参考サイト

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

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

コメント

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