class A { public: // Interface. void foo() { cout <<"A::foo()." <<endl; } }; class B { public: // Interface. void bar() { cout <<"B::bar()." <<endl; } }; class C { public: // Interface. void baz() { cout <<"C::baz()." <<endl; } }; class Facade { // data. A *m_a; B *m_b; C *m_c; public: Facade(A *a, B *b, C *c) : m_a(a), m_b(b), m_c(c) {} public: // Interface. void qux() { // 这里封装了复杂的操作. 但是 Facade 对外, 却提供了简单的 // 'qux()' 接口. 这就将负责的操作隐藏在了 Facade 之中. // Facade 与 Bridge 异曲同工, 都是使用一个独立的类, 封装变化. // Facade 封装的是多个对象的复杂性, 而 Bridge 封装的是单个对象的衍变. m_a->foo(); m_b->bar(); m_c->baz(); } }; int main(int argc, char *argv[]) { Facade f(new A, new B, new C); f.qux(); // TODO: Release memory. return 0; }