c++ - 关于桥接模式实现的问题
问题描述
最近,我做了几次尝试来理解桥接模式。不同的网站试图以不同的方式解释这个概念,但我开始理解这种模式——将抽象和实现解耦——允许我们进行不同类型的实现,此外,我们能够扩展我们的接口。但我只想确定一件事——基于下面的例子:
#include <iostream>
class Device
{
protected:
int volume_m{ 0 };
public:
int getVolume()
{
return volume_m;
}
void setVolume(int value)
{
volume_m = value;
}
};
class RemoteController
{
private:
std::shared_ptr<Device> device_m;
public:
RemoteController(std::shared_ptr<Device> device) : device_m(device) {}
void volumeUp()
{
device_m->setVolume(device_m->getVolume()+10);
std::cout << "Volume turned up. Current volume: " << device_m->getVolume() << '\n';
}
void volumeDown()
{
this->device_m->setVolume(this->device_m->getVolume() - 10);
std::cout << "Volume turned down. Current volume: " << device_m->getVolume() << '\n';
}
};
class TV : public Device
{
};
class Radio : public Device
{
};
int main()
{
std::shared_ptr<Device> tv = std::make_shared<TV>();
std::shared_ptr<RemoteController> controller = std::make_shared<RemoteController>(tv);
controller->volumeUp();
controller->volumeUp();
controller->volumeUp();
}
如果我想为TV
and发出不同的信息Radio
怎么办?Device
我应该在调用中创建虚拟方法volumeUp()
,volumeDown()
哪些将由Radio
and继承TV
?并且RemoteController
只会调用这些虚拟方法吗?
解决方案
是的,我相信在和对象中实现VolumeUp
VolumeDown
方法会更正确。因为对于这些对象,它们可能会有所不同(两者都不是第 10 步)。Radio
TV
而且我认为最好不要在没有太多需要的情况下通过 getter 和 setter 公开您的实现。更多关于这里
推荐阅读
- fix-protocol - 彭博的 Quickfix 会话设置
- python - 在该文件中进行更改后如何在python上刷新/重新加载导入的文件
- java - 微调器滚动条插入或填充
- sql - Mybatis "desc tablename" 不工作。收到错误为“设置参数时发生错误”
- sql - 在有多个系统引用的情况下收集最高值
- arrays - 将空格分隔的字符串导入整数
- python - 操纵来自 Facebook API 的响应
- php - 在 CodeIgniter 中以简单的方式显示关系表
- javafx - 如何在javafx中的球体上绘制文本
- php - 如何使用 PHP PDO 在 mySQL 中插入多行 JSON 对象数据?