重构 — 改善既有的类图设计 条款9:用Pimpl惯用法隐藏细节
2008-07-14 15:49
555 查看
重构 — 改善既有的类图设计
条款9:用Pimpl惯用法隐藏细节
黄国强 2008/7/14
重构前的代码。
// UseBySample.h
class CUseBySample
{
public:
CUseBySample(void);
~CUseBySample(void);
};
class CSample
{
public:
CSample(void);
~CSample(void);
private:
CUseBySample m_UseBySample;
};
调用 CSample 的人来说,可以看到 CUseBySample。画图应该是这样。如图一所示。
[align=center]图一
[/align]
重构后的代码。对调用 CSample 的人来说,CUseBySample 就好像不存在一样。
// Sample.h
class CSampleImpl;
class CSample
{
public:
CSample(void);
~CSample(void);
private:
std::auto_ptr<CSampleImpl *> m_Pimpl;
};
// SampleImpl.h
class CSampleImpl
{
public:
CSampleImpl(void);
~CSampleImpl(void);
private:
CUseBySample m_UseBySample;
};
[align=center]图二
[/align]图二演示了重构后的图,在这里,CSampleImpl 与 CSample 之间指针是从 CSampleImpl 指向 CSample。理由是,CSample 当作了接口,CSampleImpl 为 CSample 的实现类,故我认为应该这样画。
条款9:用Pimpl惯用法隐藏细节
黄国强 2008/7/14
重构前的代码。
// UseBySample.h
class CUseBySample
{
public:
CUseBySample(void);
~CUseBySample(void);
};
class CSample
{
public:
CSample(void);
~CSample(void);
private:
CUseBySample m_UseBySample;
};
调用 CSample 的人来说,可以看到 CUseBySample。画图应该是这样。如图一所示。
[align=center]图一
[/align]
重构后的代码。对调用 CSample 的人来说,CUseBySample 就好像不存在一样。
// Sample.h
class CSampleImpl;
class CSample
{
public:
CSample(void);
~CSample(void);
private:
std::auto_ptr<CSampleImpl *> m_Pimpl;
};
// SampleImpl.h
class CSampleImpl
{
public:
CSampleImpl(void);
~CSampleImpl(void);
private:
CUseBySample m_UseBySample;
};
[align=center]图二
[/align]图二演示了重构后的图,在这里,CSampleImpl 与 CSample 之间指针是从 CSampleImpl 指向 CSample。理由是,CSample 当作了接口,CSampleImpl 为 CSample 的实现类,故我认为应该这样画。
相关文章推荐
- 重构 — 改善既有的类图设计 条款10:将多个接口的实现类合并成一个
- 重构 — 改善既有的类图设计 条款13:用观察者模式来维护概念的完整性
- 重构 — 改善既有的类图设计 条款12:消除聚合内部的返回参数的复制
- 重构 — 改善既有的类图设计 条款16:每个类只包含两个聚合箭头
- 重构 — 改善既有的类图设计 条款8:消除继承类和基类中重复的依赖关系
- 重构 — 改善既有的类图设计 条款7:为每个角色增加一个接口
- 重构 — 改善既有的类图设计 条款14:将多个继承类对外部的依赖上移至基类
- 重构 — 改善既有的类图设计 条款11:去除对聚合内部的引用
- 重构 — 改善既有的类图设计 条款1:将双向依赖改变成单向依赖
- 重构 — 改善既有的类图设计 条款2:流水不争先
- 重构 — 改善既有的类图设计 条款15:区分基类和接口
- 重构 — 改善既有的类图设计 条款3:用 FACADE 类消除依赖关系的交叉
- 重构 — 改善既有的类图设计 条款4:消除重复的依赖关系
- 重构 — 改善既有的类图设计 条款6:模块的防火墙
- 重构 — 改善既有的类图设计 条款5:给工厂加一个代理
- 重构改善既有代码设计--重构手法14:Hide Delegate (隐藏委托关系)
- 【笔记】《重构-改善既有代码的设计》
- 重构改善既有代码的设计--在对象之间搬移特性
- 重构-改善既有代码的设计读书笔记(六)
- 重构-改善既有代码的设计:重新组织函数的九种方法(四)