【发布时间】:2017-04-24 09:48:33
【问题描述】:
我必须使用界面非常笨拙的旧类。由于我无法更改它并且依赖它,我想构建一个包装器,提供一个干净的界面。假设我有一个类 ClumsyClass。基本上,我有三种方法:
1.参考成员
Class Wrapper {
public:
Wrapper (ClumsyClass& clumsyClass)
: m_clumsyClass(clumsyClass)
{ }
int getSmth() {
return m_clumsyClass.getSmth();
}
private:
ClumsyClass& m_clumsyClass;
}
2。指针成员
Class Wrapper {
public:
Wrapper (ClumsyClass* clumsyClass)
: m_clumsyClass(clumsyClass)
{ }
int getSmth() {
return m_clumsyClass->getSmth();
}
private:
ClumsyClass* m_clumsyClass;
}
3.继承
Class Wrapper : public ClumsyClass {
...
}
哪种方法是实现包装器的“最干净”的方式?我更喜欢第三种,但是当我已经有一个 ClumsyClass 对象然后创建一个 Wrapper 对象(复制构造函数)时,将需要更多内存(因为在我的情况下需要原始类的实例)。
【问题讨论】:
-
4.如果不将实例传递给构造函数,就不能将实例作为成员吗?
-
您的包装类是否应该拥有现有 ClumsyClass 对象的所有权?如果是,则 std::move ClumsyClass 对象到你的包装类中。
-
您可能想申请facade pattern。
-
切勿将参考成员用于任何目的,句号。只使用公共继承来表达is-a relationship。我猜这会杀死三分之二。
标签: c++ design-patterns wrapper