c++ - 有关Facade模式实现的快速问题

标签 c++ design-patterns facade

关于我的Facade模式的单独实现,我有一个简短的问题,只是为了确保我理解正确:
我有一个名为Car的类,它被视为EngineLights的外观。另外,我有一个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();
}

最佳答案

是的,您的实现满足要求。
拥有针对不同类型汽车的Facade的能力,不仅需要Facade盲目地转发对其隐藏的组件的调用,而且还需要配置特定Car的组件集。
您可以在共享指针m_enginem_lights的帮助下允许它
有关具有权威性引用的更精确的论点,您可以查看this answer to another SO question(用于Java)。

关于c++ - 有关Facade模式实现的快速问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62849742/

相关文章:

c++ - 基于指针 vector 循环的嵌套范围

algorithm - 微服务和发布状态与状态变化

file - Laravel 文件与存储外观

java - 门面实现中的 ConcurrentModificationException

java - 如何从父项目的不同jar访问服务

oop - 外观模式与 SRP

c++ - Opencv:用 imwrite 保存双矩阵

c++ - 准确等待 20 毫秒

c++ - 如何强制 C++ 从磁盘分配内存?

design-patterns - 选择 MapReduce 设计模式