PImpl的全程是:“Pointer to Implementation”,主要用于隐藏一个类的实现细节。在C++中通过将类的实现细节移到一个单独的类,主类通过包含该类的指针实现功能的调用,从而完成隐藏类实现的功能。
实现方式如下:
class VideoControl{
public:
virtual void doSomething() = 0;
virtual ~VideoControl() = default;
};
class VideoControlImpl : public VideoControl {
public:
void doSomething();
};
class Widget {
public:
Widget();
~Widget();
void doSomething();
private:
VideoControl* pImpl;
};
如上,上面的代码我们要实现的功能是对外提供一个doSomething()的方法,但是又想对外隐藏实现的细节。因此在实现过程中,定义了一个抽象类VideoControl,然后创建了一个实现类VideoControlImpl 实现具体的功能,从而达到对外隐藏实现的细节。
Impl模式常被应用于SDK的开发中,日常以SDK的方式给第三方进行使用,在大型项目中使用除了上述的优点外还具备以下特点: