佐々木屋

技術的なことから趣味まで色々書きます

Facadeパターン

Facadeパターンは現在でもしばしば使われるくらい、結構メジャーなパターンです。

Facadeは「玄関」や「窓口」と言われ、その名の通りプログラムの各所から利用される一つのクラスを仲介するパターンです。利用されるクラスが将来変更される可能性がある場合や、メソッドの順番などに制約があり、各所に面倒な「縛り」があった状態で乱用されることを防ぐことができます。

例えば、OtherLibraryという将来変更の可能性があるクラスがあり、メソッドの使用順番に制約があるとします。そのままクラスを利用されると後からの修正が面倒なので、Facadeクラスを用意します。

//変更される可能性のあるクラス
public class OtherLibrary {
    public void Do1() { }
    public void Do2() { }
    public void Do3() { }
}

//Facadeクラス
public class Facade {
    public void DoLibrary() {
        OtherLibrary olib = new OtherLibrary();
        olib.Do1();
        olib.Do2();
        olib.Do3();
    }
}
'変更される可能性のあるクラス
Public Class OtherLibrary
    Public Sub Do1()
    End Sub
    Public Sub Do2()
    End Sub
    Public Sub Do3()
    End Sub
End Class

'Facadeクラス
Public Class Facade
    Public Sub DoLibrary()
        Dim olib As New OtherLibrary
        olib.Do1()
        olib.Do2()
        olib.Do3()
    End Sub
End Class

あとは使用する側は、Facadeクラスを介してOtherLibraryクラスを利用します。OtherLibraryクラスに変更が生じても修正はFacadeクラスのみとなる為、全体の修正量を大幅に抑えることとなります。

Facade doLib = new Facade();
doLib.DoLibrary();
Dim doLib As New Facade
doLib.DoLibrary()