首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于外观模式实现的快速问题

关于外观模式实现的快速问题
EN

Stack Overflow用户
提问于 2020-07-11 21:25:35
回答 1查看 41关注 0票数 1

关于我个人的外观模式实现,我有一个简短的问题,只是为了确保我理解正确:我有一个名为Car的类,它被认为是EngineLights的外观。另外,我还有一个Driver类,它可以为不同类型的汽车调用方法。我的代码是否满足正确实现外观模式的要求?

代码语言:javascript
复制
#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();
}
EN

回答 1

Stack Overflow用户

发布于 2020-07-11 22:28:26

是的,您的实现满足要求。

能够为不同种类的汽车提供Facade,需要Facade不仅盲目地将调用转发到它隐藏的组件,还需要配置特定Car的组件集。

您可以在共享指针m_enginem_lights的帮助下实现这一点

有关权威参考的更精确的论证,您可以查看this answer to another SO question (它是用于java的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62849742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档