ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

Facade

読み方はファサード。複数のクラスを組み合わせて使う場合にそれらをまとめたクラスを作り、それを窓口として使うこと。
例えば、クラスAとクラスBを組み合わせて使う場合に、クラスAのメソッドを呼んでからクラスBのメソッドを呼ばなくてはならないという順番に決まりがあるとする。このときにFacadeクラスを作成し、そのメソッド内でクラスAとクラスBを順番に呼ぶようにする。Facadeクラスを使えばクラスAとクラスBを使うときの決まりごとを知る必要はなくなる。
ClassA.java

package Test;

class ClassA
{
    void exec() {
        ...
    }
}

ClassB.java

package Test;

class ClassB
{
    void exec() {
        ...
    }
}

Facade.java

package Test;

public class Facade
{
    private Facade() {}
    public static void exec() {
        ClassA a = new ClassA();
        ClassB b = new ClassB();
        a.exec();
        b.exec();
    }
}

Main.java

import Test.Facade;

public class Main {
    public static void main(String[] args) {
        Facade.exec();
    }
}

※ソースはイメージを表したもので、実際にはこのまま入力しても動作しない。
ClassA、ClassBの順番に呼ばなくてはいけない場合でも、使う場合はFacadeのexecを呼ぶだけでよい。
このとき、ClassAやClassBにはpublicが付いていないので、パッケージTest外からはアクセスできないようになっている。パッケージTestを使う側はFacadeのexecだけ知っていればよい。

ゲームでの場合を考えてみたが、いろんな場面で役に立ちそうだ。たとえばAIとか。AIでは状況取得や判断等、いろんな処理が複雑に絡み合うから、Facadeでまとめてしまえば使う側は楽になるだろう。開発が進むにつれ複雑になっていくだろうから、それをまとめて分かりやすくすることは重要だ。これはゲームに限った話ではない。


参考文献:Java言語で学ぶデザインパターン入門
参考:
ギコ猫とFacadeパターン
Facade パターン - Wikipedia