Files
cpp-design-patterns-for-humans/examples/structural/facade.cpp
Ian Dinwoodie 5a4975691f Rolling back use of typedef with smart pointers.
This is to reduce the obfuscation of the code.
2019-05-18 10:12:01 -04:00

75 lines
1.2 KiB
C++

#include <iostream>
#include <memory>
class Computer
{
public:
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(std::shared_ptr<Computer> computer)
: computer_(computer)
{
}
void turnOn(void)
{
computer_->makeBootSound();
computer_->showLoadingScreen();
computer_->showWelcomeScreen();
}
void turnOff(void)
{
computer_->closeEverything();
computer_->sleep();
}
private:
std::shared_ptr<Computer> computer_;
};
int main()
{
std::shared_ptr<Computer> computer = std::make_shared<Computer>();
ComputerFacade facade(computer);
// Output:
// Beep!
// Loading...
// Ready to use!
facade.turnOn();
// Output:
// Closing all programs!
// Zzz
facade.turnOff();
return 0;
}