From 278dd8286ad6b386f21bd7d9e098db59dc508edd Mon Sep 17 00:00:00 2001 From: Ian Dinwoodie Date: Mon, 29 Apr 2019 20:24:43 -0400 Subject: [PATCH] Added facade example source code. --- examples/structural/facade.cpp | 76 ++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 examples/structural/facade.cpp diff --git a/examples/structural/facade.cpp b/examples/structural/facade.cpp new file mode 100644 index 0000000..afd07d2 --- /dev/null +++ b/examples/structural/facade.cpp @@ -0,0 +1,76 @@ +#include +#include + +class Computer +{ + public: + typedef std::shared_ptr ptr_t; + + void makeBootSound(void) + { + std::cout << "Beep!" << std::endl; + } + + void showLoadingScreen(void) + { + std::cout << "Loading..." << std::endl; + } + + void showWelcomeScreen(void) + { + std::cout << "Ready to use!" << std::endl; + } + + void closeEverything(void) + { + std::cout << "Closing all programs!" << std::endl; + } + void sleep(void) + { + std::cout << "Zzz" << std::endl; + } +}; + +class ComputerFacade +{ + public: + ComputerFacade(Computer::ptr_t computer) + : computer_(computer) + { + } + + void turnOn(void) + { + computer_->makeBootSound(); + computer_->showLoadingScreen(); + computer_->showWelcomeScreen(); + } + + void turnOff(void) + { + computer_->closeEverything(); + computer_->sleep(); + } + + private: + Computer::ptr_t computer_; +}; + +int main() +{ + Computer::ptr_t computer = std::make_shared(); + ComputerFacade facade(computer); + + // Output: + // Beep! + // Loading... + // Ready to use! + facade.turnOn(); + + // Output: + // Closing all programs! + // Zzz + facade.turnOff(); + + return 0; +}