C++设计模式PIMPL模式
·
Pimpl是“Pointer to implementation”的缩写,它是一种常用的C++设计模式。这种模式的核心思想是将类的实现细节从其接口中分离出来。想象一下,我们生活的世界中充满了这种分离:我们不需要知道电视是如何工作的,只需要知道如何使用遥控器。同样地,Pimpl模式允许我们仅展示类的功能,而隐藏其内部工作方式
在C++中,头文件依赖是一个普遍的问题。当一个头文件改变时,所有包含这个头文件的源文件都需要重新编译。这可能导致编译时间显著增加,特别是在大型项目中。
考虑一个类,它包含了许多私有数据成员和复杂的实现。如果我们把所有这些都放在头文件中,那么任何小小的修改都会触发大量的重新编译。
Pimpl模式通过将实现细节移到源文件中,避免了这个问题,从而使得头文件变得轻量级和稳定。
//DeviceManager类
class DeviceManager {
public:
DeviceManager() : d_pointer(std::make_unique<DeviceManagerPrivate>()) {}
void insertData(std::shared_ptr<Device> device)
{
d_pointer->insertData(device);
}
void removeData(uint32_t id)
{
d_pointer->removeData(id);
}
private:
std::unique_ptr<DeviceManagerPrivate> d_pointer;
};
//DEviceManagerPrivate类
class DeviceManagerPrivate {
public:
DeviceManagerPrivate(DeviceManager& p_instance)
: _p_instance(p_instance) {}
void insertDevice(std::shared_ptr<Device> device) {
std::lock_guard<std::mutex> lock(_device_map_mutex);
_device_map[device->getId()] = device;
std::cout<<"Device inserted\n";
}
void removeDevice(uint32_t id) {
std::lock_guard<std::mutex> lock(_device_map_mutex);
_device_map.erase(id);
std::cout<<"Device removed\n"; // 调用DeviceManager的方法
}
private:
std::mutex _device_map_mutex;
std::map<uint32_t, std::shared_ptr<Device>> _device_map;
};
更多推荐
所有评论(0)