sky*_*oor 29 c++ design-patterns
我刚刚注意到一个新术语pimpl成语,这个成语与Bridge设计模式有什么区别?我很困惑.
我也注意到pimpl成语总是用于交换功能,那是什么?有人可以举个例子吗?
Jon*_*eid 49
PIMPL是一种隐藏实现的方式,主要是为了打破编译依赖性.
另一方面,Bridge模式是支持多种实现的一种方式.
swap是一个标准的C++函数,用于交换两个对象的值.如果将指针交换到不同实现的实现,则实质上是在运行时更改类的机制.
但是在其基本和通用形式中,使用PIMPL的类指向单个实现,因此没有具有不同子类的抽象类 - 只有一个类,前向声明,并在其他地方编译.更改实现类不需要重新编译包含主标头的源.
例如,假设您有许多私有成员函数,私有枚举和私有数据.随着课程的开发和维护,这些私人"位"会相当频繁地发生变化.如果#include依赖关系是触及此头文件导致重新编译大量源,那么您就有了很好的PIMPL候选者.
所以Bridge模式是关于面向对象的设计,而PIMPL习惯是关于文件的物理设计.
(有关物理设计的更多信息,我推荐John Lakos 撰写的大型C++软件设计书.)