我正在阅读来自http://en.wikibooks.org/wiki/C%2B%2B_Programming/Code/Design_Patterns#Creational_Patterns链接的构建器模式,下面的代码似乎使用类似于pimpl习语的想法,通过在Class Cook中指向pizzaBuilder作为私有成员。皮条客成语与设计师模式中的用法有何重叠?
class Cook
{
public:
void setPizzaBuilder(PizzaBuilder* pb)
{
m_pizzaBuilder = pb;
}
Pizza* getPizza()
{
return m_pizzaBuilder->getPizza();
}
void constructPizza()
{
m_pizzaBuilder->createNewPizzaProduct();
m_pizzaBuilder->buildDough();
m_pizzaBuilder->buildSauce();
m_pizzaBuilder->buildTopping();
}
private:
PizzaBuilder* m_pizzaBuilder;
};
答案 0 :(得分:2)
没有。虽然使用的语言功能(指针,私有字段)可能相似,但预期结果却完全不同。
PIMPL对类的用户相当透明 - 这就是重点。您没有在CookPimpl
的界面中看到Cook
- 它隐藏在.cpp
文件中,调用者甚至无法对其执行任何有意义的操作。
另一方面,Builder类是自给自足的,可以在Cook
类或PizzaRestaurant
中直接使用。
更重要的是,PIMPL习语是特定于C ++的(添加或删除私有成员会导致重新编译到处,因为定义是复制粘贴的),而设计模式则努力与语言无关。