【デザインパターン】Facade

どんなもの?

  • サブシステムのインターフェースを一つのインターフェースにまとめる。これにより、サブシステムが使いやすくなる高次のインターフェースを定義したことになる。
  • 複雑なサブシステムを単純なインターフェースでラップする

どういうときに使う?

  • 複数のクラスを使用した処理をしたり、クラスの関数の複雑な呼び出しなど行うにあたって
    • ユーザのクラスに対して理解するコストが大きい場合
    • 現在の手法よりもかんたんな方法でシステムとのやり取りを行う必要がある場合
    • 特定の方法でシステムを使用する必要がある場合

何らかの機能を実現するシステムの部分集合のみが必要となる場合,そういったやり取りの方法だけを取り出したものを作る.

構成要素

  • Facade
  • ClassA
  • ClassB
  • ClassC
  • Client

コード

#include <iostream>
#include <string>
using namespace std;

class ClassA{
public:
  void print(){
    cout << "print() at ClassA" << endl;
  }
};

class ClassB{
public:
  void print(){
    cout << "print() at ClassB" << endl;
  }
};

class Facade{
public:
  void printAll(){
    a.print();
    b.print();
  }
private:
  ClassA a;
  ClassB b;
};


int main(){
  Facade facade;
  facade.printAll();
  return 0;
}