关于 Facade 模式实现的快速问题
Posted
技术标签:
【中文标题】关于 Facade 模式实现的快速问题【英文标题】:Quick question about Facade pattern implementation 【发布时间】: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();
【问题讨论】:
【参考方案1】:是的,您的实现满足要求。
能够为不同类型的汽车提供Facade,这要求Facade 不仅要盲目地将调用转发到它隐藏的组件,还要配置特定Car
的组件集。
您可以借助共享指针 m_engine
和 m_lights
来实现这一点
对于权威参考的更精确论证,您可以查看this answer to another SO question(用于 java)。
【讨论】:
以上是关于关于 Facade 模式实现的快速问题的主要内容,如果未能解决你的问题,请参考以下文章