#include <iostream>
#include <memory>
class SubsystemA {
public:
void show() { std::cout << "In SubsystemA show()." << std::endl; }
};
class SubsystemB {
public:
void show() { std::cout << "In SubsystemB show()." << std::endl; }
};
class Facade {
public:
Facade(std::shared_ptr<SubsystemA> sa, std::shared_ptr<SubsystemB> sb) : sa(sa), sb(sb) {}
void show() {
std::cout << "In Facade show()." << std::endl;
sa->show();
sb->show();
}
private:
std::shared_ptr<SubsystemA> sa = nullptr;
std::shared_ptr<SubsystemB> sb = nullptr;
};
int main(int argc, char *argv[]) {
std::shared_ptr<SubsystemA> sa = std::make_shared<SubsystemA>();
std::shared_ptr<SubsystemB> sb = std::make_shared<SubsystemB>();
Facade f(sa, sb);
f.show();
return 1;
}