桥接模式是一种结构型设计模式,它把类的具体实现细节对用户隐藏起来,以达到类之间的最小耦合关系。桥接模式也被称为pimpl惯用法,它可以将头文件的依赖关系降到最小,减少编译时间,而且可以不适用虚函数实现多态。
首先声明一个类Sample,它仅向外界暴露了最小的细节,真正的实现在内部类impl。
Sample.h
#pragma once
#include <boost/smart_ptr/shared_ptr.hpp>
using boost::shared_ptr;
class Sample
{
private:
class impl; // 不完整的内部类声明
shared_ptr<impl> p; // shared_pte成员变量
public:
Sample(void); // 构造函数
void print(); // 提供给外部的接口
};
在Sample的cpp文件中完整定义impl类和其他功能
Sample.cpp
#include "Sample.h"
#include <boost/make_shared.hpp>
#include <iostream>
// 内部类的实现
class Sample::impl
{
public:
void print();
};
void Sample::impl::print()
{
std::cout << "impl print" << std::endl;
}
Sample::Sample(void)
{
// 初始化shared_ptr
p = boost::make_shared<impl>();
}
void Sample::print()
{
// 调用pimpl实现print()
p->print();
}
最后是使用方法
Sample s;
s.print();
桥接模式非常好用,它可以任意改变具体的实现而外界对此一无所知,也减少了源文件之间的编译依赖,使程序获得了更多的灵活性。而shared_ptr是实现它的最佳工具之一,它解决了指针的共享和引用计数问题。
本文参考《Boost程序库完全开发指南》中的内存管理一章
关于pimpl惯用法请参考:http://blog.sina.com.cn/s/blog_48f93b530100n2bc.html