【发布时间】:2020-11-01 02:34:52
【问题描述】:
我有一个关于外观模式的个人实现的快速问题,只是为了确保我理解正确:
我有一个名为Car 的类,它被视为Engine 和Lights 的外观。另外,我有一个Driver 类,它可以为不同种类的汽车调用方法。
我的代码是否符合正确实现外观模式的要求?
#include <iostream>
#include <memory>
class Engine
{
public:
void turnOn()
{
std::cout << "Engine turned on. \n";
}
};
class Lights
{
public:
void turnOn()
{
std::cout << "Lights turned on. \n";
}
};
class Car // Facade for Engine and Lights
{
private:
std::shared_ptr<Engine> m_engine;
std::shared_ptr<Lights> m_lights;
public:
Car(std::shared_ptr<Engine> engine, std::shared_ptr<Lights> lights) : m_engine{ engine }, m_lights{ lights } {}
void turnCarOn()
{
std::cout << "Turning car on... \n";
m_engine->turnOn();
m_lights->turnOn();
}
};
class Driver // Facade for Car
{
private:
std::shared_ptr<Car> m_car;
public:
Driver(std::shared_ptr<Car> car) : m_car{ car } {}
void turnCarOn()
{
std::cout << "Driver presses some buttons... \n";
m_car->turnCarOn();
}
};
int main()
{
std::shared_ptr<Engine> engine = std::make_shared<Engine>();
std::shared_ptr<Lights> lights = std::make_shared<Lights>();
std::shared_ptr<Car> car = std::make_shared<Car>(engine, lights);
std::shared_ptr<Driver> driver = std::make_shared<Driver>(car);
driver->turnCarOn();
}
【问题讨论】:
标签: c++ design-patterns facade