ゲーム開発のためのオブジェクト指向(Facade)

投稿者: | 2012年5月29日

はじめに

今回はFacadeパターンです。Facadeパターンは「シンプルな窓口」を提供する方法です。

簡単に言えば、「複雑な操作・手順」を「簡単」に行えるようにしたラッパークラス、といえます。

クラス図

これは、DirectXのAPIに対してFacadeパターンを適用したものです。

サブシステムとして、

  • DirectGraphics
  • DirectSound
  • DirectMusic
  • DirectPlay
  • DirectInput
  • DirectShow
  • Win32

というそれぞれのAPIをラップしたクラスを作っておきます。これらをそのまま使っても良いのですが、さらにそれをラップしたDirectXクラスを作ります。

そうやって、ハードウェア部分の操作を行う場合、DirectXのAPIを直接呼ぶことはせず、DirectXクラスの高レベルなAPIを呼ぶだけでよいので、操作がとても楽になります。

メリットとデメリット

(DirectXのAPIを一元化した)メリットに関しては、

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

という点があります。

別ハードへの移植が容易になる、ということに関しては、例えば画像を表示する場合には、MainはDirectX::Draw()を呼ぶだけで中身の処理のことは考えません。中身ではDirectXの汚いコードを実行していようが、外には全く関係ないのです。

これにより、グラフィックスライブラリを、OpenGLに置き換えた場合、DirectXクラスを、OpenGLをラップしたOpenGLクラスに置き換えればよいことになります。(ただ、DirectXクラスなんて名前だと、ソースコードに手を入れる必要があるので、もっと適切な名前にすれば、ソースコードの修正はなくなるでしょう)

デメリットとしては、チーム開発をしている場合に、DirectXクラスがしっかり完成していないと、開発の進捗がそこで止まってしまう、ということがあります。

そうなった場合に、DirectXクラスの完成を待ちきれない人たちが、直接APIを呼び出してしまう恐れがあります。そうしてしまうとAPIに何か問題があると、直接呼び出しているコードを全て修正剃る必要があり大変な工数がかかってしまいます。

そうならないようにも、DirectXクラスは充分なゆとりを持って開発することが必要となります。