【发布时间】:2015-07-21 08:00:13
【问题描述】:
我还是 C++11 的新手。
前段时间我问了以下问题:
Best method to implement an abstract factory pattern
为了进一步研究,我想知道这个C++习语叫什么名字。
我在这里称它为pimpl,但我不确定这是否是正确的名称。
整个事情的目的是在从工厂返回 Shape 对象时隐藏原始或智能指针。使用这种“模式”工厂就能返回一个相同的类型,具体实现会封装在对象内部。
它也与decorator 非常相似,只是它不装饰任何东西。
人们也可能会发现与adapter 的相似之处,除了外部接口与“内部”接口相同。
class PimplShape : public Shape{
Shape *sh;
public:
PimplShape(Shape *sh) : sh(sh){
}
virtual ~PimplShape() override{
delete sh;
}
virtual void process() override {
sh->process();
}
};
【问题讨论】:
-
"当从工厂返回 Shape 对象时" 这意味着如何在这里完成?您没有返回包含的形状的方法。此外,这将创建一个完整的 Shape,它本身必须包含指向另一个 Shape 的指针。我不确定这就是你想要的,是吗?对我来说似乎是多余的。
-
stackoverflow.com/questions/31494734/… - 检查这个。如果使用它,工厂将始终返回一个相同的类型。具体实现会封装在这个类型中。
-
你的班级做了哪些 unique_ptr 没有做的事情?
-
@Pumkko - 这是非常好的一点,它什么也不做,除了你不需要取消引用它。
-
忘记所有那些“成语”和“模式”。它们都不是经验法则。最重要的规则是常识,根据它和你的具体情况,你可以自己想出一个合适的“模式”。
标签: c++ decorator idioms pimpl-idiom