ゲーム作成に役立つオブジェクト指向7

はじめに

今回はFacadeパターンです。
Facadeパターンは「シンプルな窓口」を提供する方法です。
 
簡単に言えば、
「複雑な操作・手順」を
「簡単」に行えるようにしたラッパークラス、
といえます。

クラス図

ファサードパターン
これは、DirectXAPIに対してFacadeパターンを適用したものです。
 
サブシステムとして、
DirectGraphics/DirectSound/DirectMusic/DirectPlay/DirectInput/DirectShow/Win32
というそれぞれのAPIをラップしたクラスを作っておきます。
 
これらをそのまま使っても良いのですが、さらにそれをラップしたDirectXクラスを作ります。
 
そうやって、ハードウェア部分の操作を行う場合、
DirectXAPIを直接呼ぶことはせず、DirectXクラスの高レベルなAPIを呼ぶだけでよいので、
操作がとても楽になります。
 

メリットとデメリット

メリットに関しては、

  • APIの操作が楽になる
  • 別ハードへの移植が容易になる

という点があります。
 
別ハードへの移植が容易になる、ということに関しては、
例えば画像を表示する場合には、MainはDirectX::Draw()を呼ぶだけで中身の処理のことは考えません。
中身ではDirectXの汚いコードを実行していようが、外には全く関係ないのです。
 
これにより、グラフィックスライブラリを、OpenGLに置き換えた場合、
DirectXクラスを、OpenGLをラップしたOpenGLクラスに置き換えればよいことになります。
(ただ、DirectXクラスなんて名前だと、ソースコードに手を入れる必要があるので、
もっと適切な名前にすれば、ソースコードの修正はなくなるでしょう)
 
デメリットとしては、チーム開発をしている場合に、
DirectXクラスがしっかり完成していないと、開発の進捗がそこで止まってしまう、
ということがあります。
 
そうなった場合に、DirectXクラスの完成を待ちきれない人たちが、
直接APIを呼び出してしまう恐れがあります。
 
で、
「これだったら、最初から直接API叩いてりゃ良かったんだよ!!」
という話になってしまいます。
 
そうならないように、DirectXクラスは充分なゆとりを持って開発することが必要となります。